Поле сводной таблицы суммы в отношении Eloquent многие-ко-многим - PullRequest
0 голосов
/ 19 мая 2019

У меня есть таблица orders, таблица items и сводная таблица с именем item_order, которая имеет два настраиваемых поля (price, quantity).Отношения между Order и Item принадлежат ToMany.Я пытаюсь вернуть количество всех элементов с идентификатором 1, где родительский Order->status == 'received'.Что касается жизни, я не могу понять, как это сделать.

class Order extends Model
{
    public function items()
    {
        return $this->belongsToMany(Item::class)->withPivot('price', 'quantity');
    }
}

class Item extends Model
{
    public function orders()
    {
        return $this->belongsToMany(Order::class)->withPivot('price', 'quantity');
    }
}

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Учитывая, что вы знаете id элемента, наиболее эффективный способ - запросить таблицу item_order напрямую. Я бы создал модель разворота для ItemOrder, определил бы отношение belongsTo(Order::class) и сделал бы это:

$sum = ItemOrder::where('item_id', $someItemId)
    ->whereHas('order', function ($q) {
        return $q->where('status', 'received');
    })
    ->sum('quantity');
0 голосов
/ 19 мая 2019

Попробуйте это:

$total_quantity = Item::find(1) // getting the Item
    ->orders() // entering the relationship
    ->with('items') // eager loading related data
    ->where('status', '=', 'received') // constraining the relationship
    ->get() // getting the results: Collection of Order
    ->sum('pivot.quantity'); // sum the pivot field to return a single value.

Стратегия здесь состоит в том, чтобы найти нужные Item, чтобы затем получить соответствующие Order s для этого Item, который имеет статус 'received', чтобы, наконец, sum атрибут pivot, чтобы получить один значение.

Это должно работать.

...