从 Laravel 范围查询中排除连接列 ONLY_FULL_GROUP_BY 错误

我在 Laravel 项目中有一个范围查询,它隐式地获取了结果集中我不想要的两列,因为它们导致 ONLY_FULL_GROUP_BY 错误,我不想禁用此数据库条件。


我们有以下关系:


组织有 -> 类别


public function categories()

{

    return $this->belongsToMany(

        Category::class,

        'organisation_unit_template_categories',

        'organisation_unit_id',

        'template_category_id'

    );

}

类别有 -> 模板


public function templates()

{

    return $this->hasMany(Template::class);

}

模板有 -> 尺寸


public function dimensions()

{

    return $this->belongsTo(Dimensions::class, 'dimensions_id');

}

我们的类别也有一个范围查询,这样我们就可以得到所有包含至少一个维度为 'digital = 0' 的模板的类别


public function scopeIsPrint($query)

{

    return $query

        ->select($this->getTable().'.*')

        ->join('templates', 'template_categories.id', '=', 'templates.category_id')

        ->join('template_dimensions', 'template_dimensions.id', '=', 'templates.dimensions_id')

        ->where('template_dimensions.digital', 0)

        ->groupBy($this->getTable().'.id');

}

我们从控制器调用范围查询,如下所示:


$categories = $this->organisation->categories()->isPrint()->get();

这是输出:


SELECT 

    `template_categories`.*,

    `organisation_unit_template_categories`.`organisation_unit_id` AS `pivot_organisation_unit_id`,

    `organisation_unit_template_categories`.`template_category_id` AS `pivot_template_category_id`

FROM

    `template_categories`

        INNER JOIN

    `organisation_unit_template_categories` ON `template_categories`.`id` = `organisation_unit_template_categories`.`template_category_id`

        INNER JOIN

    `templates` ON `template_categories`.`id` = `templates`.`category_id`

        INNER JOIN

    `template_dimensions` ON `template_dimensions`.`id` = `templates`.`dimensions_id`

WHERE

    `organisation_unit_template_categories`.`organisation_unit_id` = 2

        AND `template_dimensions`.`digital` = 0

        AND `template_categories`.`deleted_at` IS NULL

GROUP BY `template_categories`.`id`


烙印99
浏览 180回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP