按多对多数据透视 Table 列对 Laravel 集合进行排序

Sorting a Laravel Collection by Many to Many Pivot Table Column

我正在考虑按照 order_column 在枢轴 table [=18= 上定义的顺序显示属于 productasset 的列表].在这种情况下,sortBy 函数无效。不会抛出任何错误,但无论如何 returns 集合数组都以相同的顺序排列。

这是我目前的布局:

数据库:

    Schema::create('product_asset', function (Blueprint $table) {
        $table->integer('product_id')->unsigned()->index();
        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');

        $table->integer('asset_id')->unsigned()->index();
        $table->foreign('asset_id')->references('id')->on('assets')->onDelete('cascade');

        $table->unsignedInteger('order_column')->nullable();
    });

型号:

/**
 * The assets that belong to the product.
 */
public function assets()
{
    return $this->belongsToMany('App\Asset', 'product_asset')->withPivot('order_column');
}

查看:

<ul>
    @foreach($resources->sortBy('pivot_order_column') as $resource)
        <li><a href="{{ $resource->url }}">{{ $resource->name }}</a></li>
    @endforeach
</ul>

如果您对此有任何帮助,我将不胜感激!提前致谢。

类似问题:

https://laravel.io/forum/04-17-2014-order-by-pivot-table-attribute-in-eloquent

Laravel eloquent sorting by pivot in many to many relationships

你的错误在这里 pivot_order_column 你没有列名 pivot_order_column 你有一个名为 order_column 的列 您可以在关系上访问它,因为您已在关系上正确使用 withPivot

您可以使用 Indra 的建议来订购查询:

public function assets()
{
    return $this->belongsToMany('App\Asset', 'product_asset')->withPivot('order_column')
        ->orderBy('product_asset.order_column');
}

或者在Laravel中排序结果:

$resources->sortBy('pivot.order_column')