дело в том что количество условий может меняться, например, фильтрация товаров по критериям
если критерий не выбран, он просто не учитывается, вариант :
Код: Выделить всё
. . .
->where(array(
'and',
'id = :id',
'status = :status',
), array(
':id' => $id,
':status' => $status,
))
. . .
не подходит т.к. предполагается что в случае когда определенный критерий не выбран нужно передавать NULL или что - то подобное (false, ''), т.е. вариант типа :
Код: Выделить всё
if (!empty($model->user_id)) $user_id = $model->user_id; else $user_id = NULL;
if (!empty($model->status)) $status = $model->status; else $status = NULL;
if (!empty($model->payment)) $payment = $model->payment; else $payment = NULL;
$all = $all->where(array(
'and',
'user_id = :user_id',
'status = :status',
'payment = :payment',
), array(
':user_id' => $user_id,
':status' => $status,
':payment' => $payment,
));
срабатывает не корректно.
Хотелось бы что - то типа такого:
Код: Выделить всё
...
if (!empty($model->user_id)) $where .= ', user_id = "'.$model->user_id.'"';
if (!empty($model->status)) $where .= ', status = "'.$model->status.'"';
if (!empty($model->payment)) $where .= ', payment = "'.$model->payment.'"';
...
Для случая : user_id, status, payment = true, получаем запрос
[_query:private] => Array
(
[select] => `id`, `amount`, `price`
[from] => `{{order}}` `o`
[where] => (user_id = :user_id) AND (status = :status) AND (payment = :payment)
)
Для случая : user_id, status = true и payment = false , получаем запрос
[_query:private] => Array
(
[select] => `id`, `amount`, `price`
[from] => `{{order}}` `o`
[where] => (user_id = :user_id) AND (status = :status)
)