Я новичок в 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 запроса …
Поскольку я не знаю, в чем твоя цель достичь, я не могу помочь тебе в этой теме …