首页 > 解决方案 > Laravel - 按关系收集订单

问题描述

我有我需要这样订购的收藏品:

这是我的关系函数:

public function adMegaPremiumAdObjects()
    {
        return $this->hasMany(MegaPremiumAdObject::class, 'ad_id', 'id');
    }

有了这个,我只能用该表中的字段订购我的收藏:

public function index()
    {
        $collection = AdObject::orderBy('some_field', 'DESC')->get();
    }

所以我需要按我的关系订购这个集合adMegaPremiumAdObjects——如果某个模型有这种关系,它需要首先显示在列表中。

如果我尝试使用whereHas它只会向我展示具有这种关系的收藏,这对我没有帮助。

我怎样才能做到这一点?

标签: phplaravelsql-order-byrelationship

解决方案


您可以使用withCount()添加关系计数列,您可以通过以下方式订购:

$collection = AdObject::withCount('adMegaPremiumAdObjects')->orderBy('adMegaPremiumAdObjects_count', 'DESC')->get();

来自 Laravel 文档:

如果你想计算一个关系的结果数而不实际加载它们,你可以使用withCount方法,它会在你的结果模型上放置一个 {relation}_count 列。


推荐阅读