Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制不';在yii2查询中无法正常工作_Yii2 - Fatal编程技术网

限制不';在yii2查询中无法正常工作

限制不';在yii2查询中无法正常工作,yii2,Yii2,我想在我的数据库中选择20条记录,因此我使用以下代码: $query = Course::find() ->alias("t") ->select([ 't.id', 't.subtitle', 't.title', 't.info', 't.skill_level_id', '

我想在我的数据库中选择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])
                        ->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行如果删除
选择
部分并选择所有内容,会发生什么情况?我确认它将显示正确的记录数?