Yii второй параметр запроса - PullRequest
0 голосов
/ 11 октября 2018

У меня есть запрос к моей базе данных с использованием Yii

$query = Task::find()
        ->where([Task::tableName().'.parent_id' => 0]);
$query->leftJoin(TaskModel::tableName(), [TaskModel::tableName().'.task_id' => Task::tableName().'.id']);
$query->andWhere([TaskModel::tableName().'.format' => null]);
$rows = $query
        ->offset($pages->offset)
        ->limit($pages->limit)
        ->orderBy([
            Task::tableName().'.status' => SORT_DESC,
            Task::tableName().'.`estimated_date`=0' => SORT_ASC,
            Task::tableName().'.estimated_date' => SORT_ASC
        ])
        ->all();

Но это не работает, потому что в leftJoin, когда я устанавливаю отношения между таблицами, второй параметр устанавливает строку.

rawSqlмоего запроса:

SELECT `task`.* 
FROM `task` LEFT JOIN `task_model`
ON `task_model`.`task_id`='{{%task}}.id'
WHERE (`task`.`parent_id`=0) AND (`task_model`.`task_id` IS NULL)

1 Ответ

0 голосов
/ 11 октября 2018

В этом случае следует использовать строку:

$query->leftJoin(TaskModel::tableName(), TaskModel::tableName() . '.task_id = ' . Task::tableName() . '.id');

Этот случай явно упоминается в документации :

Обратите внимание, что формат массива where() предназначен для сопоставления столбцов со значениями, а не столбцов со столбцами, поэтому следующее не будет работать должным образом: ['post.author_id' => 'user.id'], оно будет сопоставлять значение столбца post.author_id со строкой 'user.id'.Здесь рекомендуется использовать строковый синтаксис, который больше подходит для объединения:

'post.author_id = user.id'
...