2010-02-26 3 views
1

Можно ли изготовить уайлдкард WHERE запроса с доктриной, например, так:Удостоверение wildcard WHERE?

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

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

Чтобы добавить, что я могу получить эту работу:

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

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

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

Благодаря

+0

Я подозреваю, что есть лучший способ решить вашу проблему. Кроме того, разрешая пользователю указывать предложение where, вероятно, является безопасным no-no. – camomileCase

+0

Спасибо - не позволяя пользователям это делать, а просто нужно обрабатывать множество необязательных значений выпадающего списка. Любые мысли о том, что это лучший способ? – Tom

ответ

2

Если вы построите запрос динамически, вы также можете проверить, имеет ли значение $value значение или нет, а затем добавьте туда, где это необходимо. Например.

$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

Феликс, да, действительно, это способ сделать это. Манипулирование объектом запроса является самым простым для его динамического создания. Благодарю. – Tom

0

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

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

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

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

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

Смежные вопросы