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

nhhxz33t  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(334)

如何在laravel中编写这个有说服力的查询,以便在本例中加载用户模型和概要文件模型之间的关系模型?我试图避免两个单独的问题。
我觉得我很亲近,但有些事情不太对劲。

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

集合正在正确返回用户详细信息。但它显示的配置文件关系为空。


# relations: array:1 [▼

    "profile" => null
  ]

我相信我有一个正确的设置与用户模型和配置文件所需的关系。
用户.php

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

authorprofile.php文件

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

zmeyuzjn1#

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

kq4fsx7k2#

假设authorprofile模型表中有id为user的记录就可以了。
不管你怎么写:
我试图避免两个单独的问题。
好吧,这不是真的,如果你有一个单一的记录,急于加载不会有任何帮助。在这种情况下,将执行2个查询-无论您使用或不使用急切加载。
如果您有多个用户,并且每个用户都希望加载配置文件,那么快速加载会有所帮助,但如果您只有一条记录,则不会更改任何内容。
另外,代替:

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

您应该使用:

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

因为你希望这里只有一个用户。

ccrfmcuu

ccrfmcuu3#

您的模型应该是这样的。配置文件表上的用户id和用户表上的id

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

相关问题