Laravel 5.8如何在foreach中按数据透视表值的总和排序?

时间:2019-03-04 20:46:53

标签: laravel

我有下表:

零件:

id | name
1  | Lock
2  | Light

货架:

id | name
1  | 1A
2  | 1B

part_shelf

id | part_id | shelf_id | stock
1  | 1       | 1        | 5
2  | 1       | 2        | 10
3  | 2       | 1        | 4

关系:

在零件模型中:

public function shelves()
{
    return $this->belongsToMany( Shelf::class )->withPivot( 'stock' );
}

在货架型号中:

public function parts()
{
    return $this->belongsToMany(Part::class)->withPivot('stock');
}

我想做的是根据数据透视表的总库存订购所有零件。

我尝试过的是:

$parts = Part::all(); // This is inside controller

@foreach($parts->shelves()->orderBy('pivot_stock', 'desc') as $part)
@foreach($parts->shelves()->orderBy('part_shelf.stock', 'desc') as $part)

我确实知道我可以通过以下方式获得单个零件的总库存:

$part->shelves()->sum('stock')

我只是不知道该如何在foreach循环的所有部分中使用它。

还查看了其他问题,但这并没有真正帮助:

1 个答案:

答案 0 :(得分:0)

我有类似的问题。我有三张桌子。玩家(在我的代码“ Igrac”中),锦标赛(在我的代码“ Turnir_Piramida”中)和players_tournaments数据透视表(在我的代码“ Nastup_piramida”中)。在数据透视表中,每个锦标赛中每个玩家的得分也是列点。而且我需要总结每个玩家的得分,然后按得分总和对表格进行排序。

我设法通过您发布的第三个链接来做到这一点。您可以在此link

上看到我的解决方案