Laravel eloquent order by custom 属性
Posted
技术标签:
【中文标题】Laravel eloquent order by custom 属性【英文标题】:Laravel eloquent order by custom attribute 【发布时间】:2022-01-11 09:40:59 【问题描述】:我有一个total_views
属性添加到我的Product
模型中,就像这样
public function getTotalViewsAttribute()
return (int)$this->views()->sum('count');
views()
是 Product
上的关系,就像这样
public function views()
return $this->morphMany(View::class, 'viewable');
我想做的是通过total_views
订购我的Product
。或者换句话说,按views()
关系的总和排序。
我已尝试在查询中使用->orderBy('total_views')
,但它似乎没有按预期工作。
我们将不胜感激。
【问题讨论】:
***.com/questions/45586280/…:试试这个 所以你需要orderby关系计数对吗?? @ManojKiranAppathurai 是的。 这能回答你的问题吗? Laravel OrderBy relationship count 【参考方案1】:Eloquent getter 只能工作,当查询被执行时,你当前的代码不能工作。我总是在查询中使用withCount()
;
$products = Product ::withCount(['views'])->get();
计数将在名为 views_count;
的属性上。
foreach ($products as $product)
$product->views_count; // get view count
也可以按列排序,因为它会出现在查询返回的 SQL 中。
Product ::withCount(['views'])->orderBy('views_count', 'desc')->get();
【讨论】:
以上是关于Laravel eloquent order by custom 属性的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent multiple whereHas on relationship where column 'order' 高于前一个 whereHas
Laravel Eloquent Multiple Where with count