Laravel 5获取关系数据

时间:2017-12-22 20:54:42

标签: php laravel laravel-5

我已经使用Laravel 5.5进行了应用,并使用了MySQL数据库。我有2张桌子 人:id,name,homeplanet_id 行星:id,名字 和外键关键人物.homeplanet_id引用行星id

我还有2个模型:Person和Planet,以及PersonController。 我可以使用

在控制器中获取Person的数据
Person::find($id)->getAttributes()

但是就像

[
    id => 1
    name => Name
    homeplanet_id => 1
]

如何让数据看起来像下一个

[
    id => 1
    name => Name
    homeplanet_id => Planet_name
]

2 个答案:

答案 0 :(得分:1)

  

您可能需要一个位于您的Eloquent模型和实际返回给您的应用程序用户的JSON响应之间的转换层。

https://laravel.com/docs/5.5/eloquent-resources

因此,如果您想获取JSON,请使用资源。如果您想要这种数据格式用于Blade视图,那么转换它是个坏主意。只需使用Blade模板中的数据:

{{ $person->name }} lives on the planet {{ $person->planet->name }}

其中planetPerson模型中定义的关系名称:

public function planet()
{
    return $this->belongsTo(Planet::class, 'homeplanet_id')
}

答案 1 :(得分:0)

与()方法一起使用, 像什么一样的东西 $ person = Person::where(array())->with('planet')->get(); //You can fetch all related data by passing multiple values for method with()
打印

{{$person->planet->name}} //where planet indicated the relation on person model as follows

planet表示人物模型上的关系。

在我们的案例中
获取数据 $person = Person::where(array('id'=>$id))->with('planet')->get();

模型中执行以下操作,使用with()方法获取行星:

Person extends model{
   public function panet(){
      //your relation one to one, one to many etc.....whatever
   }
}

尝试在Laravel(eloquent)和范围查询中探索急切加载

访问预先加载的链接,一切都将由ORM本身完成。Link