Laravel where 条件不适用于查询 WITH 关系

Posted

技术标签:

【中文标题】Laravel where 条件不适用于查询 WITH 关系【英文标题】:Laravel where condition not working on query WITH relation 【发布时间】:2019-10-17 11:53:02 【问题描述】:

我有一个如下所示的简单查询:

$category = Category::with('translation')
            ->with(['childCategories' => function ($query) 
                $query->active();
            ])
            ->where('id', $id)->first();

范围和关系:

public function scopeActive($query)

    return $query->where('active', 1);


public function childCategories()

    return $this->hasManyThrough('App\SupremeShop\Models\Category',
        'App\SupremeShop\Models\CategoryToCategory',
        'id_parent_category', //category_to_categories
        'id',  //categories
        'id',
        'id_category');  // category_to_categories.

所以我正在寻找给定“主要”类别的类别、一些翻译和子类别。查询返回 15 个子类别。但在查询中是应该只采用活动的范围,并且它无法正常工作。当我使用 dd 时,它也显示不活动的子类别。我试图删除范围并编写简单的 WHERE 但结果是一样的。

有人知道为什么条件不能正常工作吗?

【问题讨论】:

【参考方案1】:

我认为问题在于该列不明确,因为 Category 及其关系 childCategories 都是同一个模型并共享同一个表。

active() 范围被应用到父 Category 而不是子 Categories

试试看是否可行

$category = Category::from('categories as c')
                    ->with(['childCategories' => function ($query) 
                        $query->active();
                    ])
                    ->where('id', $id)->first();

【讨论】:

以上是关于Laravel where 条件不适用于查询 WITH 关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel concat 查询(where 条件)

如何在 Laravel 的 DB 查询中编写两个 where 条件?

if 和 else 条件在 laravel 中不适用于数据数组

Laravel:在不同的行中使用不同的 where 条件进行查询

Laravel where 条件 - pgsql 查询

Laravel 4:如何将 WHERE 条件应用于 Eloquent 类的所有查询?