orderBy on hasMany 关系 laravel

Posted

技术标签:

【中文标题】orderBy on hasMany 关系 laravel【英文标题】:orderBy on hasMany relationship laravel 【发布时间】:2020-03-25 18:29:30 【问题描述】:

我使用 ProductCatRel 模型建立了从 Category 模型到 Product 模型的“hasMany”关系。

我正在尝试从 Category 模型订购我的产品。 “where”条件很好,但“orderBy”不起作用。这是我的代码:

public function Products()
    return $this->hasMany(ProductCatRel::class,'category')
        ->with('Product')
        ->whereHas('Product', function($q)
            $q->where('status', 1)->orderBy('position');
    );

【问题讨论】:

【参考方案1】:

使用下面的 sn -p 可能会起作用

public function products()
    return $this->hasMany(ProductCatRel::class,'category')
        ->with('Product')
        ->whereHas('Product', function($q)
            $q->where('status', 1)
    );


$products = App\Category::find(1)->products()->orderBy('position')->get();

【讨论】:

【参考方案2】:

whereHas() 只检查存在,不影响检索到的关系数据。

您应该在with() 方法中应用orderBy()。您还需要在with() 方法中重复状态检查。

public function Products()
    return $this
        ->hasMany(ProductCatRel::class, 'category')
        ->with(['Product' => function ($q) 
            $q->where('status', 1)->orderBy('position');
        ])
        ->whereHas('Product', function($q) 
            $q->where('status', 1);
        );

【讨论】:

以上是关于orderBy on hasMany 关系 laravel的主要内容,如果未能解决你的问题,请参考以下文章

Laravel eloquent apply whereHas on the latest record of hasMany 关系

Laravel 5.2 orderBy与ofCount的关系导致SQL错误,因为尝试获取列而不是计数失败

php Paginate on hasMany系列

CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?

如何同步hasMany关系上的子表数据?

Laravel 关系查询加载 hasMany + BelongsToMany