Mysql запрос
SELECT task.type AS type, task.user_author_id AS user_author_id
FROM task_goal
LEFT JOIN user
ON task_goal.user_author_id = user.id
LEFT JOIN task
ON (task_goal.id = task.goal_id) AND CASE WHEN task.type = 'personal' and task.user_author_id != user.id
THEN user.show_personal_task = 1
ELSE true
END;
Все бы хорошо, но тут LEFT JOIN `user`берется с task_goal а мне надо чтобы этот джин работал с джином который чуть ниже, т.е. с таблицей task так как внутри джина таск есть обращение к таблице user
Yii2
$query = TaskGoal::find();
$query->select(['task_goal.*','task_goal.type AS goal_type'])->andWhere(['task_goal.active'=>true])
->joinWith([
'tasks'=>function(ActiveQuery $itemQuery) {
$itemQuery->andOnCondition(['task.active' => true]);
$itemQuery->andOnCondition("CASE WHEN task.type = 'personal'
THEN user.show_personal_task = 1 and task.user_author_id != user.id
ELSE true
END");
}]);
Связь
public function getTasks() {
return $this->hasMany(Task::class, ['goal_id' => 'id']);
}
Я пробовал делать так
$query = TaskGoal::find();
$query->select(['task_goal.*','task_goal.type AS goal_type'])->andWhere(['task_goal.active'=>true])
->joinWith([
'tasks'=>function(ActiveQuery $itemQuery) {
$itemQuery->andOnCondition(['task.active' => true]);
$itemQuery->leftJoin('user','task.user_author_id = user.id');
$itemQuery->andOnCondition("CASE WHEN task.type = 'personal'
THEN user.show_personal_task = 1 and task.user_author_id != user.id
ELSE true
END");
}]);
но джоин выполняется после CASE WHEN... в итоге получаю логичную ошибку "что такое "user""...