使用with()函数进行急切加载模型关系的雄辩查询问题

时间:2018-09-17 17:25:13

标签: mysql laravel laravel-5 eloquent eager-loading

如何在Laravel中编写此雄辩的查询,以便它渴望加载 with()在此示例中的 User 模型和 Profile 之间的关系模型强>模型?我试图避免2个单独的查询。

我觉得自己很亲近,但是有些不对劲。

$author = User::where('id', $id)->with('profile')->get();

该集合正确返回了用户详细信息。但这会将个人资料关系显示为空。

  #relations: array:1 [▼
    "profile" => null
  ]

我相信我使用用户模型和个人资料所需的关系可以正确设置一切。

User.php

public function profile()
{
    return $this->hasOne('App\AuthorProfile', 'user_id');
}

AuthorProfile.php

public function user()
{
    return $this->belongsTo('App\User');
}

3 个答案:

答案 0 :(得分:2)

假设对于AuthorProfile模型表,您具有用户ID的记录应该没问题。

但是你写的是:

  

我试图避免2个单独的查询。

好吧,这不是事实,如果您有一条记录,那么急于加载根本无法帮助您。在这种情况下,将执行2个查询-无论您使用紧急加载还是不执行加载。

如果您有多个用户,并且想要每个用户都想要加载配置文件,那么快速加载会有所帮助,但是如果您有一个记录,它将不会改变任何内容。

另外代替:

$author = User::where('id', $id)->with('profile')->get();

您应该使用:

$author = User::with('profile')->find($id);

因为您希望这里是单个用户。

答案 1 :(得分:0)

"column \"label\" does not exist"

答案 2 :(得分:0)

您的模型应该是这样。个人资料表上的User_id和用户表上的id

public function profile()
{
    return $this->hasOne('App\AuthorProfile', 'user_id','id');
}
相关问题