У меня есть следующая настройка в Laravel - клиент, который может иметь много отчетов, содержащих много строк данных.
Клиентский объект (может иметь много отчетов)
class Client extends Model
{
public function reports()
{
return $this
->belongsToMany('App\Report')
->withTimestamps();
}
}
Объект отчета (может иметь много строк данных)
class Report extends Model
{
public function data()
{
return $this
->belongsToMany('App\Data', 'report_data')
->withTimestamps();
}
}
Объект данных (принадлежит отчету)
class Data extends Model
{
public function report()
{
return $this
->belongsTo('App\Report')
->withTimestamps();
}
}
Если я хочу получить отчет для клиента, я могу сделать это (если я хочу получить первый):
$report = $client -> reports -> first();
var_dump($report -> data); die;
Это дало бы мне все данные для первого отчета.
Or:
foreach($client -> reports as $report){
var_dump($report -> data);
}
Теперь вопрос: если у клиента было 3 отчета, как я могу объединить все данные для этих 3 отчетов?
Так, например, если у клиента было 3 отчета, например:
Report 1
Name: test
View: 100
Revenue: 10
Report 2
Name: foo
Views: 50
Revenue: 30
Report 3
Name: bah
Views: 40
Revenue: 20
Мы могли бы получить:
Name: Total
Views: 190
Revenue: 60
Я пробовал перебирать отчеты и объединять их в одну коллекцию, но это не работает.
$reports = $client -> reports -> all();
$collection = new \Illuminate\Database\Eloquent\Collection;
foreach($reports as $report){
$collection = $collection -> merge($report -> data);
}
var_dump($collection);
die;
Отношения поставили меня немного в тупик