Связь модели 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"}

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

Благодарность


person Dave-loper    schedule 22.12.2017    source источник


Ответы (3)


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

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

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

См. раздел Нетерпеливая загрузка в документации.

person Sniper Wolf    schedule 22.12.2017
comment
Я получаю только информацию о местонахождении, ничего о Событии... - person Dave-loper; 22.12.2017
comment
Событие находится внутри переменной $event, у вас есть свойство location для доступа к нему. Вы можете прочитать все, используя методы Collection, такие как toJson или toArray, в коллекции $event, например $event->toJson(). - person Sniper Wolf; 22.12.2017

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

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

return $event->toJson();

У вас будет доступ к вашему мероприятию с data.location

person Mathieu Ferre    schedule 22.12.2017

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

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

or:

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

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

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

person Marcin Nabiałek    schedule 22.12.2017