我试图通过数据透视表中的一列在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');
我很困惑如何解决这个问题。
感谢您的帮助。非常感谢你。
答案 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,第一个用于收藏夹,第二个用于其他。