我已使用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)
答案 0 :(得分:0)
在这种情况下,您应该使用字符串:
$query->leftJoin(TaskModel::tableName(), TaskModel::tableName() . '.task_id = ' . Task::tableName() . '.id');
documentation中明确提到了这种情况:
请注意,
where()
的数组格式旨在将列与值匹配,而不是将列与列匹配,因此以下内容将无法正常工作:['post.author_id' => 'user.id']
,它将与{{1} }列值与字符串post.author_id
相对。建议在此处使用更适合联接的字符串语法:'user.id'