按多个到多个数据透视表列对Laravel集合进行排序

问题描述 投票:0回答:2

我正在按照asset在数据透视表product上定义的顺序显示属于order_columnproduct_assets列表。在这种情况下,sortBy函数没有效果。不会抛出任何错误,但无论如何都会以相同的顺序返回集合数组。

这是我目前列出的内容:

数据库:

    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

laravel laravel-eloquent
2个回答
1
投票

您可以使用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')

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.