yii第二个查询参数

ht4b089n  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(340)

我已经用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中,当我设置表之间的关系时,第二个参数设置字符串。
我的查询的SQL:

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)
ecr0jaav

ecr0jaav1#

在这种情况下,应使用字符串:

$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'

相关问题