покритикуйте метод!

Духовность™

Продвинутый новичок
я бы where тоже передавал бы как массив типа
да, пришлось так сделать. Ибо иначе приходится явно mysql_escape_string вызывать (а нафиг это делать, если у меня обертка СУБД плейхолдеры использует? :)).

Теперь это немного громоздко, но меня полностью удовлетворяет:

PHP:
$post->findRow(array
                  (
                    'where' => array('id_user = ? AND post_url = ?' => array($id_user, $post_url)),
                    'order'=>array('id_comment'=>'DESC', 'id_user'=>'ASC'),
                    'start'=>$startLimit,
                    'stop'=>$stopLimit 
                  )
              );
 

pilot911

Новичок
PHP:
'where' => array('id_user = ? AND post_url = ?' => array($id_user, $post_url)),

какой глубокий смысл заключен в дополнительном парсинге этой строчки и замены знаков вопроса ?
 

Angerslave

Новичок
pilot911
Удобное экранирование. Писать постоянно mysql_real_escape_string быстро надоедает :)
 

AmdY

Пью пиво
Команда форума
PHP:
$post->query()->where(array('id_user = ? AND post_url = ?' => array($id_user, $post_url))
->order(array('id_comment'=>'DESC', 'id_user'=>'ASC'))
->start($startLimit)
->stop($stopLimit)
->findRow();
преимущества:
методы вместо ключей массива, про очепятки я выше писал
единый интерфейс для запросов, можно назначить методы select, update, delete, *join, findOne
 

AmdY

Пью пиво
Команда форума
$post->query() возвращает объект, создающий запросы.
class Query_Creater {
// здесь методы, которые присваивают атрибутам типо where нужные значения
public getQuery() {
// здесь собираем запрос типо return "SELECT {$this->select} FROM {$this->from} ...."
}
public function findRow() {
$db->fetchAll( $this->getQuery);
}
}

-~{}~ 26.11.08 15:41:

в query(), можно ещё задавать from для Query_Creater
 

pilot911

Новичок
Автор оригинала: AmdY
$post->query() возвращает объект, создающий запросы.
class Query_Creater {
// здесь методы, которые присваивают атрибутам типо where нужные значения
public getQuery() {
// здесь собираем запрос типо return "SELECT {$this->select} FROM {$this->from} ...."
}
public function findRow() {
$db->fetchAll( $this->getQuery);
}
}

-~{}~ 26.11.08 15:41:

в query(), можно ещё задавать from для Query_Creater
а если необходимо сделать несколько объединений в одном запросе, как это будет выглядеть ?
 

AmdY

Пью пиво
Команда форума
либо $post->query()->from('t1')->leftJoin('t3 ON t3.t1_i1 = t1.id')...
тот же sql, только методы для удобства, если не хоченся писать запрос строкой.
 

Wicked

Новичок
Автор оригинала: AmdY
либо $post->query()->from('t1')->leftJoin('t3 ON t3.t1_i1 = t1.id')...
ты на доктрине не писал, случаем? .-)
PHP:
$q = Doctrine_Query::create();
$q->from('User u')
  ->leftJoin('u.Group g')
  ->innerJoin('u.Phonenumber p WITH u.id > 3')
  ->leftJoin('u.Email e');
$users = $q->execute();
 

AmdY

Пью пиво
Команда форума
Wicked
пишу и писать буду, это ещё привычка с pear, там есть похожий пакет.
кстати вопрос по доктрине, захотел недавно перейти на генерацию базы из yaml, не могу решить вопрос с foreign ключами, у меня вываливается ошибка 1005, пробовал отправлять SET FOREIGN_KEY_CHECKS = 0, но не помогло/ mysql 5.0x
 

HraKK

Мудак
Команда форума
Красиво? Я сам использую банальный QB но очень плююсь на него.
А тут - мы заменяем ' FROM ' из запроса на '->from('
И все! Чем красивее?
 

Wicked

Новичок
HraKK
может быть такой пример будет посимпатичнее:

PHP:
$users = Doctrine_Query::create()->query("SELECT u.*, g.* FROM User u LEFT JOIN u.Groups g ORDER BY u.id DESC LIMIT 1");
print_r($users->toArray(true));
в глубинах доктрины разворачивается в такие запросы (отгадаешь для чего? :)):
[sql]SELECT DISTINCT u3.id FROM user u3 LEFT JOIN user_group u4 /* заметь, в оригинальном запросе про эту таблицу - ни слова */ ON u3.id = u4.user_id LEFT JOIN groups g2 ON g2.id = u4.group_id ORDER BY u3.id DESC LIMIT 1;
SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, g.id AS g__id, g.name AS g__name FROM user u LEFT JOIN user_group u2 ON u.id = u2.user_id LEFT JOIN groups g ON g.id = u2.group_id WHERE u.id IN ('2' /* это id юзера из первого запроса */) ORDER BY u.id DESC;[/sql]

и выводит:
Код:
Array
(
    [0] => Array
        (
            [id] => 2
            [username] => jwage
            [password] => changeme
            [Groups] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => Lead
                        )
                    [1] => Array
                        (
                            [id] => 3
                            [name] => Documentation
                        )
                )
        )
)
 

AmdY

Пью пиво
Команда форума
Wicked
доктрина это уже orm (причём тяжёлый), а мы всё же обсуждаем query builder и здесь я вцелом согласен с HraKK
 
Сверху