繁体   English   中英

Laravel 热切加载按关系条目/值的计数排序

[英]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在加载产品时始终加载commentsuser

产品控制器.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
        ]);
    }
}

所以,我现在有两个问题:

  1. 我什至需要$product->load('comments')吗? - 因为我已经弄清楚什么时候我只传递$product而不执行$product->load('comments')我也加载了评论......看起来我不需要它。 那正确吗?

  2. 如何按喜欢的数量(行,因为您只能投票)和子评论的数量(行)对评论进行排序?

这是我迄今为止尝试过的(所有都不适合我):

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM