【问题标题】:laravel 5.5 model relation in jsonjson中的laravel 5.5模型关系
【发布时间】:2017-12-22 14:50:14
【问题描述】:

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

这仅包含位置的属性,而不是事件的属性!如何同时显示?

谢谢

【问题讨论】:

    标签: json laravel eloquent laravel-5.5 laravel-response


    【解决方案1】:

    尝试:

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

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

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

    【讨论】:

    • 我只获得了位置信息,对事件一无所知...
    • 事件在$event 变量中,您有一个属性location 可以访问它。您可以使用Collection 方法阅读所有内容,例如toJsontoArray on $event 集合,例如$event->toJson()
    【解决方案2】:

    试试这个:

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

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

    【讨论】:

      【解决方案3】:

      你可以使用:

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

      或:

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

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

      如果您想获取有关加载关系的详细信息,可以查看laravel eager loading using with() vs load() after creating the parent model

      【讨论】:

        猜你喜欢
        • 2018-07-11
        • 1970-01-01
        • 2018-06-27
        • 1970-01-01
        • 2018-04-18
        • 2019-01-30
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        相关资源
        最近更新 更多