Laravel - Количество пунктов, через которые принадлежит - PullRequest
1 голос
/ 27 апреля 2020

Компания может иметь много дат доставки. Дата доставки может иметь много записей. Модель Entry содержит

public function company()
{
    return $this->belongsTo(Company::class);
}

public function delivery_date()
{
    return $this->belongsTo(MgDeliveryDate::class,  'mg_delivery_date_id');
}

. Я хочу подсчитать, сколько записей имеет каждая дата доставки для каждой компании. Например, что-то вроде

$companies = Company->with('delivery_dates', 'delivery_dates.entries')->withCount('delivery_dates.entries')

Так что, если бы мои данные были

Company            Delivery Date          Entry Number
   A                   1/2/2020                1
   A                   1/2/2020                2
   A                   2/2/2020                3
   B                   1/2/2020                4

, я бы получил две компании, компанию А с двумя датами поставки и счетом 2 для первой даты ( 1/2/2020) и 1 для второй даты (2/2/2020) и компании B с одной датой поставки, с количеством записей 1. 1. 1010 *

Ответы [ 3 ]

0 голосов
/ 27 апреля 2020

// я не уверен, что вы на самом деле хотите .. если вам нужны такие данные, то вы можете попробовать это

[
{ company:abc , date:[{1/20} , {2/20} ...] , entry:[{1} ,{2} ...]} , 
{}, 
....
]

Модель компании

public function entry()
{
    return $this->hasMany(entry::class);
}

And Then
$companies = Company::withCount(['entry', 'delivery_dates' => function ($query) {
    $query->where(your condition);
}])->get();
0 голосов
/ 27 апреля 2020

Вы можете написать:

$companies = Compnay::with(['delivery_dates' => function ($q) {
    $q->withCount('entries');
}])
->get();

Вы получите следующий результат:

enter image description here

0 голосов
/ 27 апреля 2020

Хороший вопрос. Сделайте это.

$companies = Company::with('delivery_dates.entries')->get();

$companies->map(function($company){
    return $company->delivery_dates->map(function($delivery){
        return $delivery->entries->count();
    })->groupBy('delivery_date');
});

Я использовал Laravel Коллекция map () метод.

...