Мне нужна помощь для извлечения красноречивых реляционных данных.
Допустим, у меня есть красноречивое отношение:
Модель и отношение
компании
Атрибут: (идентификатор, код, имя, статус)
Связь:
public function sites(){
$this->hasMany(\App\Models\Site::class);
}
Сайт
Атрибут: (id, company_id, код, имя, статус)
Связь:
public function company(){
$this->belongsTo(\App\Models\Company::class);
}
Что я хочу получить
Я хочу получить все данные сайта вместе с названием его компании, например:
[
{
"id":7,
"company_id":1,
"company_name":"Company 1",
"code":"S001",
"name":"Site 001",
"status":"Active"
},
{
"id":8,
"company_id":1,
"company_name":"Company 1",
"code":"S002",
"name":"Site 002",
"status":"Active"
}
]
1020 *
*
Что я уже пробовал
1 - я уже пробовал этим методом:
$sites = Site::with('company')->get();
dd($sites->toJson());
но это дает мне:
[
{
"id":7,
"company_id":1,
"code":"S001",
"name":"Site 001",
"status":"Active",
"company":{
"id":1,
"code":"C001",
"name":"Company 1",
"status":"Active"
}
},
{
"id":8,
"company_id":1,
"code":"S002",
"name":"Site 002",
"status":"Active",
"company":{
"id":1,
"code":"C001",
"name":"Company 1",
"status":"Active"
}
},
]
2 - Сейчас я использую этот способ для получения данных. Но я думаю, что есть еще один лучший способ без зацикливания целых данных, просто чтобы получить какой-то определенный атрибут отношения:
$sites = Site::get();
foreach ($sites as $site){
$site['company_name'] = $site->company()->first()->name;
}
dd($sites->toJson());
Мой вопрос
Собственно, как лучше всего получить нужные мне данные? Можно ли не использовать цикл, а просто использовать запрос отношения Eloquent? Спасибо.