В Laravel для ApiResource есть прекрасная функция $this->whenLoaded для
ленивой загрузки отношений у модели
https://laravel.com/docs/8.x/eloquent-resources#co....
У меня такая проблема, что у меня есть свойство у модели, которое не возвращает отношение, а идет к другой таблице в базе данных, собирает квартиры по определенному условию и складывает это всё в массив (дизайнер PhpMyAdmin внизу)
В данном случае у меня есть адреса и квартиры в них хранятся у пользователей в отдельном поле (ну чтобы адресов сильно много не плодить, у нас тим лид сказал, что так правильно делать и мы так делаем, я токо Junior и пока еще учусь ¯\_(ツ)_/¯)
Код для взятия квартир рабочий и выглядит следующим образом
Address.php
public function apartments() {
return $this->clients->map(function ($item) {
return $item->apartment;
})->sort()->flatten();
}
Я хочу в AdressResource сделать так, чтобы лениво подгружалось также через with(или как-то по другому, ну чтобы механизм подгрузки при обращении Adresss:with('apartments')->get()) был примерно таким (но это естественно не работает).
class Address extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
"id" => $this->id,
"city" => $this->ctiy,
"street" => $this->address,
"house" => $this->house,
$this->corpus ?? "corpus" => $this->corpus,
?? вот эта строчка нужно чтобы была ленивой, но я не могу придумать логику --> "apartments" => $this->apartments()
];
}
}
P.S. связь многие ко многим предполагается, что офис будет обслуживать много адресов и тут я думаю сделать связь всё-таки один ко многим. Тут как бы офисы есть и одна пачка адресов относится к одному офису, а другая пачка к другому (ну короче как в почте, типо одни адреса туда, а другие сюда).