Laravel按数据透视表列排序

Laravel按数据透视表列排序

问题描述:

我想从数据透视表中的列中对laravel中的雄辩查询进行排序。Laravel按数据透视表列排序

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

产品表中包含这些列:

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

用户表中包含这些列:

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

收藏表包含这些列:

id, name, email, created_at, updated_at 

在用户模式下:

id, user_id, product_id, created_at, updated_at 

在控制器方面,雄辩的查询是目前:

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

我只是困惑,如何解决这一点。

您的帮助表示赞赏。非常感谢。

,你可以使用类似波纹管:

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

,如果你使用预先加载和加载收藏也需要一个有效的解决方案下面的代码

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

BadMethodCallException 方法不存在。 – RSK

+0

我看不到数据库中的任何优先级字段,您是否可以尝试改变其中存在的任何其他字段的优先级 –

+0

它实际上可用,忘记放在顶部。所以优先领域是可用的。 – RSK

使用,我认为你应该让两个查询为避免加载重复产品,第一个适用于喜欢的产品,第二个应该是这样的一些东西:

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

然后在刀片文件中,您创建了两个foreach,第一个用于收藏,第二个用于其他。