Модельное отношение laravel 5.5 в json

Я пытаюсь понять, если в laravel 5.5 есть метод, который дает модель, связанную с другой моделью внешним ключом, я могу получить результат полного объединения атрибутов обеих моделей. Я хочу не возвращать две модели и объединять их.

Ниже код моей модели:

class Event extends Model { 
     public function location(){
         return $this->hasOne('App\Location');
     }
 }

В контроллере я получаю информацию о местоположении соответствующего события, но в результате я хотел бы видеть информацию как о событии, так и о местоположении.

В контроллере Если я вызываю модель с ORM:

  $event = Event::where('name',$name)->first()->location;

  $model=$eventLocation->getModel();
   return $model;

И получить этот JSON с

{"id":12,"created_at":null,"updated_at":null,"name":"location_test","event_id":"1"}

Это содержит только атрибуты местоположения, а не для события! Как я могу показать оба?

Спасибо

3 ответа

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

$event = Event::with('location')->where('name', $name)->first();
$location = $event->location;

Таким образом, вы получите само событие и полное местоположение location поле.

См. Раздел " Жадная загрузка " в документации.

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

$event = Event::with('location')->where('name', $name)->first();

return $event->toJson();

Вы будете иметь доступ к вашему событию с data.location

Ты можешь использовать:

$event = Event::with('location')->where('name',$name)->first();

или же:

$event = Event::where('name',$name)->first();
$event->load('location');

Затем, когда вы просто вернете модель или позвоните $event->toJson() у тебя будет location отношения загружены.

Если вы хотите получить подробную информацию о загрузочных отношениях, вы можете посмотреть на загрузку laravel, используя with() против load() после создания родительской модели.

Другие вопросы по тегам