как написать условие 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 я не понимаю, как писать. 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