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

时间:2018-04-19 19:22:14

标签: laravel laravel-eloquent

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

这是我目前的布局:

数据库:

product_asset

型号:

    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');
}

我非常感谢有关这方面的任何帮助!提前谢谢。

类似问题:

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

Laravel eloquent sorting by pivot in many to many relationships

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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')