Подстановочный знак доктрины ГДЕ запрос? - PullRequest
1 голос
/ 26 февраля 2010

Можно ли с помощью Doctrine создать запрос подстановочного знака WHERE, например:

->where('this_field = ?', ANYTHING);

Я бы использовал это для динамического построения поискового запроса из неизвестных выбранных пользователем параметров, и поэтому ему нужно было бы иметь условие на месте, но оно могло бы принимать значение «что угодно».

Чтобы добавить, я могу заставить это работать:

$field = 'this_field = ?';
$value = 5;
...
->where($field, $value);

... но это все еще не позволяет мне использовать «что-нибудь» в качестве значения или исключить все условия запроса. Следующие ошибки:

$field = NULL;
$value = NULL;
...
->where($field, $value);

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Если вы строите запрос динамически, вы также можете проверить, имеет ли значение $value значение или нет, а затем добавить часть where при необходимости. Э.Г.

$q; // Your query object.

if(isset($value)) {   // or empty() or maybe just if($value) depending on your needs.
    $q->where('this_field = ?', $value);
}

Это легче понять и отладить imo.

0 голосов
/ 26 февраля 2010

[Ответ на свой вопрос]

Поработав с этим, нашел решение, которое работает, выложив сюда другие.

Использование ->whereIn позволяет Doctrine полностью игнорировать условие запроса:

$empty = array();
...
->andWhereIn('this_field', $empty)

Вышеуказанное условие вообще не включается в результирующий SQL.

...