laravel - Laravel 5.7:Eloquent orderBy 相关模型以及使用 whereHas 条件
问题描述
我有一个OptionGroup
具有相关模型的模型,而该模型Option
又具有相关模型Attribute
。
我想获取所有带有选项的选项组,其中选项具有特定的属性 ( product_id
) 值,然后default
在属性模型中对所有其他值 () 进行排序。
在我的控制器中:
$optionGroups = OptionGroup::with(['options' => function($query) use ($product) {
$query->whereHas('attributes', function($q) use ($product) {
$q->where('product_id', $product->id);
// Ideally here:
// $q->orderBy('default', 'desc');
});
}])
->orderBy('sort_order', 'desc')
->get();
我尝试了各种雄辩的范围来尝试将其应用orderBy()
到模型上,但没有成功。
谢谢。
解决方案
以下查询将为您提供OptionGroups
至少Option
有一个Attribute
属于给定产品(由 确定product_id
)的所有。然后,该查询也将仅使用给定的egaer 加载 allOptions
和它们。但是由于歧义,无法对子关系进行排序:Attributes
product_id
$optionGroups = OptionGroup::query()
->whereHas('options.attribute' => function ($query) use ($product) {
$query->where('product_id', $product->id);
})
->with(['options.attribute' => function ($query) use ($product) {
$query->where('product_id', $product->id);
}])
->get();
推荐阅读
- rust - 如何使用 ncurses crate 显示方框图字符?
- kubernetes - 使用 Recreate 策略和 maxSurge 部署 Kubernetes?
- c# - LinkedList 中的 C# 基数排序实现
- python - 我应该使用什么模式来打印以下代码的日期、时间和进程 ID?
- c# - 在c#上使用反射获取字段的值
- apache-spark - SPARK 如何在出错的情况下获取列名(FAILFAST 模式)?
- jmeter - 我有 JSR233 侦听器,在 JMeter 非 gui 模式下似乎被忽略了
- javascript - 最终结果中 javascript 中的颜色代码
- angular - Angular6如何将共享数据与同级服务绑定,以便每个实例都有自己的引用
- angular - 带有formarray的Angular 9动态控件无法正常工作