gpt4 book ai didi

php - Laravel - 在多对多表关系中按主值排序

转载 作者:行者123 更新时间:2023-11-29 07:33:46 29 4
gpt4 key购买 nike

我的应用程序(Laravel 5.0)有一个产品表和一个格式表。这两个表(format_product)之间存在多对多关系。一种产品可以以多种形式出售。每个关系都有一个特定的价格,因此我在 format_product 表中添加了一个“价格”列。

现在我正在尝试按价格对产品进行排序(以最便宜的格式-每个产品的价格作为引用值)。还有一件事,我需要对结果进行分页。

class Product extends Model {

public function formats()
{
return $this->belongsToMany('App\Format')->withPivot('price')->orderBy('pivot_price', 'asc');
}

}

class Format extends Model {

public function products()
{
return $this->belongsToMany('App\Product')->withPivot('price');
}

}

这是 format_product_pivot:

Schema::create('format_product', function(Blueprint $table) {
$table->integer('format_id')->unsigned()->index();
$table->foreign('format_id')->references('id')->on('formats')->onDelete('cascade');
$table->integer('product_id')->unsigned()->index();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->decimal('price', 8, 2);
});

例如,具有以下值:

Product A - Format 1 = 15€
Product A - Format 2 = 10€
Product B - Format 1 = 8€
Product B - Format 2 = 20€
Product C - Format 3 = 5€
Product C - Format 1 = 2€

我想要这个结果:

Product C - 1 ( 2€)
Product B - 1 ( 8€)
Product A - 2 (10€)

最佳答案

好的,所以我通常不会将 orderBy() 放入我的模型中,但这不应该是一个太大的问题。您必须使用联接才能获得您想要的结果。

您可以在 Controller 中使用以下查询:

public function index() {
$products = Product::join('format_product', 'format_product.product_id', '=', 'products.id')
->select('products.id', 'format_product.format_id', 'format_product.price')
->orderBy('format_product.price', 'asc')
->paginate(25)
->get();
}

无法按关系对产品进行排序的原因与无法按内部数组对多维数组进行排序的原因相同。

例如:

$array = [
'key1' => [
'anotherKey' => 'some value'
],
'key2' => [
'anotherKey' => 'some other value',
'anotherKey2' => 'some other value2'
],
'key3' => [
'anotherKey' => 'yet another value'
]
]

您无法通过 anotherKey 对此数组进行排序。您必须使用联接。

希望这有帮助。

关于php - Laravel - 在多对多表关系中按主值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648069/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com