Laravel — порядок по значению поворота в отношении таблицы ко многим

Мое приложение (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');
}

}

Это формат_продукт_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€)

0

Решение

Хорошо, поэтому я обычно не ставлю orderBy() в моей модели, но это не должно быть слишком большой проблемой. Вам нужно будет использовать соединение, чтобы получить желаемые результаты.

Вы можете использовать следующий запрос в вашем контроллере:

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, Вы должны использовать соединение.

Надеюсь это поможет.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]