как написать условие if внутри условия where на основе подзапроса в Yii2 query builder



У меня есть подзапрос внутри основного запроса, как показано ниже:



$subquery = (new Query())->select('COUNT(project_sup_id)')
->from('project_supervisors AS sup')
->where(['AND','sup.project_ref_id = p.project_id']);

$uQuery =(new Query())->select(['project_id','supcount' => $subquery])
->from('projects AS p')
->join('LEFT JOIN','project_supervisors AS sup','sup.project_ref_id = project_id')
->andWhere('IF(supcount>0, sup_project_status=1, project_status=1)');


Я пытаюсь написать, где условие основано на логике, то есть, если число, полученное из подзапроса, больше нуля, то где условие должно быть sup_project_status=1 иначе project_status=1. В обычном Mysql легко написать условие if внутри where, но в yii2 я не понимаю, как писать.
694   1  

1 ответ:

Попробуйте использовать выражение yii\db\для RDBMS-native expressions:

->andWhere(new yii\db\Expression('IF(supcount>0, sup_project_status=1, project_status=1)'));

Вы можете проверить свой SQL, используя:

echo $uQuery->createCommand()->getRawSql();

Возвращает подготовленную SQL-команду по объекту запроса. Также вы можете написать весь SQL в виде команды yii\db\:

$count = Yii::$app->db->createCommand('SELECT count(...) FROM ... WHERE ...')->queryScalar();

Comments

    Ничего не найдено.