Подстановочный знак доктрины ГДЕ запрос?

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

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

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

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

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

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

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

Спасибо


person Tom    schedule 26.02.2010    source источник
comment
Я подозреваю, что есть лучший способ решить вашу проблему. Кроме того, разрешение пользователю указывать предложение where, вероятно, является нарушением безопасности.   -  person camomileCase    schedule 26.02.2010
comment
Спасибо - не позволяйте пользователям делать это, а просто нужно обработать множество необязательных раскрывающихся значений. Любые мысли о том, что это лучший способ может быть?   -  person Tom    schedule 26.02.2010


Ответы (2)


Если вы строите запрос динамически, вы также можете проверить, имеет ли $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.

person Felix Kling    schedule 26.02.2010
comment
Феликс, ах, да, именно так. Манипулировать объектом запроса проще всего для его динамического построения. Спасибо. - person Tom; 26.02.2010

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

Поиграв с этим, нашел решение, которое работает, опубликовав здесь для других.

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

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

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

person Tom    schedule 26.02.2010