2014-10-06 5 views
0

я застрял с этим кодом:Yii Query Builder Где LIKE пункт

->select ('t1.id_i, t2.status') 
->from ('table1 as t1, table2 as t2')   
->where(array('or', 'id_i'=>$model->id, array('like', 't2.status', '%Beginner%'))) 

вот что я хочу

WHERE t1.id_i=$model->id AND/OR t2.status LIKE "Beginner" //AND/OR are optional combination 

я попробовал сочетание много без результата.

Пожалуйста, помогите мне. Спасибо.

ответ

0

Я думаю, что проблема в том, что CDbCommand «s where() метод не поддерживает использование пар ключ-значение в$conditions массива, как вы делаете здесь: 'id_i'=>$model->id_e. Это обязательство должно происходить через параметр $params.

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

Вот измененный код для вызова where():

->where('id_i = :id_e OR t2.status LIKE "%Beginner%"', array(':id_e' => $model->id_e)) 

Вы можете видеть, что это ближе к финальному SQL, который делает отладку проще.

Если вы решили использовать оригинальный синтаксис, попробуйте вместо этого:

->where(array('or', 'id_i = :id_e', array('like', 't2.status', '%Beginner%')), array(':id_e' = $model->id_e)) 
0

попытка поставить условие о том, где() метод, на классе CDbCommand, где() метод определяет, где часть запрос, первый аргумент - условие запроса, а второй аргумент - это параметры (имя => значение), которые должны быть привязаны к запросу.

->select ('t1.id_i, t2.status') 
->from ('table1 as t1, table2 as t2')   
->where('t1.id_i=:id_i OR t2.status LIKE "%:status%"',array(':id_i' => $model->id,':status' => 'Beginner')) 
более

подробности о CDbCommand где() метод here

+1

Хэя, не забудьте объяснить, что вы изменили и почему. Не забывайте, что в Stack Overflow есть кучи новичков, которые могли бы изучить кое-что из вашего опыта, и то, что очевидно для вас, может быть не для них. –

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