限制不';在yii2查询中无法正常工作
我想在我的数据库中选择20条记录,因此我使用以下代码:限制不';在yii2查询中无法正常工作,yii2,Yii2,我想在我的数据库中选择20条记录,因此我使用以下代码: $query = Course::find() ->alias("t") ->select([ 't.id', 't.subtitle', 't.title', 't.info', 't.skill_level_id', '
$query = Course::find()
->alias("t")
->select([
't.id', 't.subtitle', 't.title',
't.info', 't.skill_level_id', 't.special',
't.created', 't.modified', 't.price',
't.training_type_id', 't.media_id', 't.instructor_id',
't.extension_type'
])
->where(["t.deleted" => 0])
->joinWith([
'skillLevel', "courseTarget", "requirement", 'categoryCourses', "media",
"instructor", "trainingType"
]);
$query->limit(20);
return $query->all();
但是这个代码只会选择5条记录
当我删除joinWith
部分时,我的代码工作正常,并选择了20条记录。
修改代码:
$query = Course::find()
->alias("t")
->select([
't.id', 't.subtitle', 't.title',
't.info', 't.skill_level_id', 't.special',
't.created', 't.modified', 't.price',
't.training_type_id', 't.media_id', 't.instructor_id',
't.extension_type'
])
->where(["t.deleted" => 0]);
$query->limit(20);
return $query->all();
修改后的代码将返回20条记录
更新1:
当我删除limit(20)
时,它将返回496
条记录,但当我添加limit(20)
时,它只返回5条记录
$query = Course::find()
->alias("t")
->select([
't.id', 't.subtitle', 't.title',
't.info', 't.skill_level_id', 't.special',
't.created', 't.modified', 't.price',
't.training_type_id', 't.media_id', 't.instructor_id',
't.extension_type'
])
->where(["t.deleted" => 0])
->joinWith([
'skillLevel', "courseTarget", "requirement", 'categoryCourses', "media",
"instructor", "trainingType"
]);
return $query->all()
此代码工作正常并返回所有内容,但
limit()
查询将导致响应错误这可能是因为课程
与多个项目有许多关系。因此,如果您有带2个需求的课程
,则该查询将为每个需求
返回带重复课程
数据的2行。重复的数据合并到一个课程
模型中,因此两行成为一个模型。这正是这里发生的事情-查询返回20行,但它只有5个唯一的课程模型
如果您不需要访问SQL查询中的关系(例如用于筛选),可以替换为-它不会对SQL查询执行JOIN
,只注册关系的即时加载。您可以阅读更多有关这两种方法之间差异的信息
如果您需要此加入
您可能应该按课程
ID对结果进行分组,以避免重复的课程
行
$query->groupBy('t.id');
可能是联接查询只有5行如果删除选择部分并选择所有内容,会发生什么情况?我确认它将显示正确的记录数?