[英]Laravel eager loading sort by count of relationship entries/values
我有产品也有评论。 这个评论可以投票,评论也可以有子评论。
现在我想按日期、喜欢的数量和子评论的数量对这些评论进行排序。
在我向您展示我的尝试之前,我将向您展示我的代码:
Product.php(模型)
namespace App;
class Product extends Model
{
/**
* @Protected_variables
*/
protected $with = ['comments', 'user'];
/**
* @Relationships
*/
public function user()
{
return $this->belongsTo('App\User');
}
public function comments()
{
return $this->morphMany('App\Comment', 'commentable');
}
}
如您所见,我已经告诉 Laravel 使用变量$with
在加载产品时始终加载comments
和user
。
产品控制器.php
public function show(Product $product, Request $request)
{
if($request->has('sorting') && in_array($request->sorting, ['Beliebtesten', 'Diskutiertesten', 'Neusten'])){
if($request->sorting == 'Neusten'){
$product->load(['comments' => function ($query) {
$query->orderBy('created_at', 'desc');
}]);
}else if($request->sorting == 'Diskutiertesten'){
$product->load(['comments.children' => function ($query) {
$query->orderBy('published_date', 'asc');
}]);
}else{
$product->load('comments')->get()->sortByDesc(function($product)
{
return $product->likes->count();
});
}
return response()->json([
'product' => $product
]);
}else{
$product->load('comments');
return response()->json([
'product' => $product
]);
}
}
所以,我现在有两个问题:
我什至需要$product->load('comments')
吗? - 因为我已经弄清楚什么时候我只传递$product
而不执行$product->load('comments')
我也加载了评论......看起来我不需要它。 那正确吗?
如何按喜欢的数量(行,因为您只能投票)和子评论的数量(行)对评论进行排序?
这是我迄今为止尝试过的(所有都不适合我):
1.
$product->load('comments')
->withCount('likes')
->orderBy('likes_count','DESC')
->get();
$product->loadCount('comments');
$product->orderBy('comments_count', 'desc');
1:
$comments = $product->comments;
$comments->loadCount('likes');
$comments->sortByDesc('likes_count');
2:
$product->loadCount('comments');
$product->sortByDesc('comments_count');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.