Laravel按透视表列排序

时间:2017-08-03 05:56:41

标签: laravel join pivot

我试图通过数据透视表中的一列在laravel中对一个雄辩的查询进行排序。

基本上只要产品被用户收藏,它就会被添加到数据透视表中,它应首先显示收藏的产品,然后显示其余产品。因为我将在刀片中使用foreach。

产品表包含以下列:

id, category, product_name, priority, status, created_at, updated_at

users表包含以下列:

id, name, email, created_at, updated_at

用户模型中包含以下内容:

public function favorites()
{
    return $this->belongsToMany(Products::class, 'favorites', 'user_id', 'product_id')
                ->withTimeStamps();
}

收藏夹表包含以下列:

id, user_id, product_id, created_at, updated_at

在控制器中,当前是雄辩的查询:

$productinprogress = Products::all()
    ->sortByDesc("priority")
    ->where('status', 'inprogress');

我很困惑如何解决这个问题。

感谢您的帮助。非常感谢你。

2 个答案:

答案 0 :(得分:0)

你可以使用类似下面的东西:

$productinprogress = Products::all()
   ->where('status', 'inprogress')
   ->sortByDesc("priority");

如果您想要使用热切加载和加载收藏夹的高效解决方案,请使用以下代码

 $productinprogress = Products::all()
    ->with('favorites')
    ->where('status', 'inprogress')
    ->sortByDesc("priority");

答案 1 :(得分:0)

我认为你应该提出两个问题以避免加载重复的产品,第一个是喜欢的产品,第二个应该是这样的东西:

Products::all()->sortByDesc("priority")->where('status', 'inprogress')->whereNotIn('id', $favorite_products);

然后在刀片文件中,您制作两个foreach,第一个用于收藏夹,第二个用于其他。