php - Laravel - 按关系收集订单
问题描述
我有我需要这样订购的收藏品:
- 因此,如果我的模型具有这种关系,则它需要在列表中排在第一位
- 如果我的模型没有这种关系,它需要在有关系的模型之后列出
这是我的关系函数:
public function adMegaPremiumAdObjects()
{
return $this->hasMany(MegaPremiumAdObject::class, 'ad_id', 'id');
}
有了这个,我只能用该表中的字段订购我的收藏:
public function index()
{
$collection = AdObject::orderBy('some_field', 'DESC')->get();
}
所以我需要按我的关系订购这个集合adMegaPremiumAdObjects
——如果某个模型有这种关系,它需要首先显示在列表中。
如果我尝试使用whereHas
它只会向我展示具有这种关系的收藏,这对我没有帮助。
我怎样才能做到这一点?
解决方案
您可以使用withCount()
添加关系计数列,您可以通过以下方式订购:
$collection = AdObject::withCount('adMegaPremiumAdObjects')->orderBy('adMegaPremiumAdObjects_count', 'DESC')->get();
来自 Laravel 文档:
如果你想计算一个关系的结果数而不实际加载它们,你可以使用withCount方法,它会在你的结果模型上放置一个 {relation}_count 列。
推荐阅读
- javascript - 在百里香中预填充下拉选择列表
- java - 在 Java 8 Streaming 中,如何从收集器中调用方法?
- numpy - 跨样本或跨特征的数据标准化?
- tensorflow - HardSigmoid 的 TFLite 更改参数
- android - Zip 路径遍历漏洞警报 (Android)
- docker - 检查驱动程序“nvidia-docker”中是否存在卷“nvidia_driver_410.48”时出错
- amazon-web-services - 为什么 AWS Glue 需要时间来开始执行?
- oauth - Amazon Alexa 获取访问令牌
- tableau-api - 无法打开或卸载 Tableau Public 2020
- ember.js - Ember - 从浏览器控制台更改当前路由