使用热切加载时发生奇怪的事情。 例如,我希望获取与用户相关的所有作者,并且一切正常,但是当我使用急切加载时,效果并不理想。
示例:
Users:
- id;
- name
- ...
Authors:
- id
- user_id
- ...
模型用户:
public function authorsProfile()
{
return $this->hasMany(Author::class, 'user_id', 'id');
}
我的控制器:
$user = Auth::user();
//Get all users and the authors that is related with it (Not working well)
dd( $user->with('authorsProfile')->get());
//Get all authors that is related with this user (Working well)
dd( $user->authorsProfile);
在我的情况下,应该只向我提供与当前经过身份验证的用户相关的作者,但是由于某些原因,当我出于某种原因尝试使用eagerloading时,会得到所有用户并存在关联(作者)...
有人知道怎么了吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您已经加载了User,则使用->with()
是不正确的方法。对于您的情况,请尝试->load()
:
$user = Auth::user();
$user->load("authorsProfile");
dd($user->authorsProfile); // Should be a Collection
从技术上讲,您甚至不需要调用->load()
,因为尝试访问未加载->with()
的关系将在此时加载它:
$user = Auth::user();
dd($user->authorsProfile); // Should also be a Collection
要使其像编码时一样工作,您需要致电:
$user = Auth::user();
$user = User::with(["authorsProfile"])->where("id", "=", $user->id)->first();
dd($user->authorsProfile);
但是,您可以看到为什么效率不高;您将再次调用数据库以检索您已有的记录。
因此,有很多方法可以完成此任务。看看可以做什么。