Преобразование из запроса в ModelSearch Yii2

Я новичок в Yii2, и у меня есть запрос с правильным результатом:

SELECT DISTINCT workloadTeam.project_id, wp.project_name, workloadTeam.user_id, workloadTeam.commit_time, wp.workload_type FROM (SELECT p.id, p.project_name, w.user_id, w.commit_time, w.comment, w.workload_type FROM workload as w, project as p WHERE w.user_id = 23 AND p.id = w.project_id) wp INNER JOIN workload as workloadTeam ON wp.id = workloadTeam.project_id 

Но в моем ModelSearch.php я написал:

 $user_id = Yii::$app->user->id; $subquery = Workload::find()->select('p.id', 'p.project_name', 'w.user_id', 'w.commit_time', 'w.comment', 'w.workload_type') ->from(['project as p', 'workload as w']) ->where(['user_id' => $user_id, 'p.id' => 'w.project_id']); $query = Workload::find() ->select(['workloadTeam.project_id', 'wp.project_name', 'workloadTeam.user_id', 'workloadTeam.from_date', 'workloadTeam.to_date', 'workloadTeam.workload_type', 'workloadTeam.comment']) ->where(['', '', $subquery]); $query->join('INNER JOIN', 'workload as workloadTeam', 'wp.id = workloadTeam.project_id'); 

Произошла ошибка:

 SELECT COUNT(*) FROM `workload` INNER JOIN `workload` `workloadTeam` ON wp.id = workloadTeam.project_id WHERE `` (SELECT p.project_name `p`.`id` FROM `project` `p`, `workload` `w` WHERE (`user_id`=20) AND (`p`.`id`='w.project_id')) 

И я не могу исправить это с правильным запросом выше. У вас есть решение об этом?

Эта ошибка показана на панели инструментов Yii-debug? Тогда ваш запрос (который вы назвали ошибкой), вероятно, является только счетом из запроса, который указан ранее.

Вы пропустили добавление подзапроса from предложения, как показано в вашем рабочем sql. Добавьте это в свое место, where предложение было не в том месте. Поместите подзапросы в условия, если у вас есть скалярные результаты, потому что вы должны использовать этот результат с такими операндами, как = , >= , in

Это может сработать:

 $user_id = Yii::$app->user->id; $subquery = Workload::find()->select([ 'p.id as id', 'p.project_name as project_name', 'w.user_id as user_id', 'w.commit_time as commit_time', 'w.comment as comment', 'w.workload_type as workload_type' ]) ->from([ 'project as p', 'workload as w' ]) ->where([ 'user_id' => $user_id, 'p.id' => 'w.project_id' ]); $query = Workload::find() ->select([ 'workloadTeam.project_id', 'wp.project_name', 'workloadTeam.user_id', 'workloadTeam.from_date', 'workloadTeam.to_date', 'workloadTeam.workload_type', 'workloadTeam.comment' ]) ->from([$subquery => 'wp']); //you were missing this line $query->join('INNER JOIN', 'workload as workloadTeam', 'wp.id = workloadTeam.project_id'); 

Но вы не используете никаких выборок из вашей таблицы workload в запросе $query main запроса …

Поскольку я не знаю, в чем твоя цель достичь, я не могу помочь тебе в этой теме …