0

我试图理解,如果在 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"}

这仅包含位置的属性,而不包含事件的属性!我怎样才能显示两者?

谢谢

4

3 回答 3

1

尝试:

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

通过这种方式,您将获得事件本身和完整的相关位置作为location字段。

请参阅文档中的Eager Loading部分。

于 2017-12-22T14:53:19.590 回答
0

您可以使用:

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

或者:

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

然后,当您返回模型或调用时$event->toJson(),您将location加载您的关系。

如果您想获取有关加载关系的详细信息,可以在创建父模型后使用 with() vs load() 查看 laravel 急切加载

于 2017-12-22T15:52:51.900 回答
0

尝试这个 :

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

return $event->toJson();

您将可以通过以下方式访问您的活动data.location

于 2017-12-22T15:43:06.267 回答