Laravel Eager-loading仅在调用属性时有效

问题描述 投票:0回答:2

我已经定义了我的Slot模型来加载来自User模型的关系,如下所示:

public function userAssignedFull(): HasOne {
    return $this->hasOne(User::class,'id','user_assigned');
}

('slots'表包含'user_assigned'字段,通过该字段我连接到'id'上的用户记录)

以下代码查找Slot模型但没有'userAssignedFull'。我只获得'user_assigned'中的用户ID。

  $slot = Slot::with('userAssignedFull')->find($slot_id);

但是之后调用它会返回我想要的关系:

$fullUserModel = $slot->userAssignedFull;

谁能告诉我我做错了什么?

laravel eloquent eager-loading eloquent--relationship
2个回答
1
投票

Builder::with()返回Builder实例。

所以你必须调用$slot->userAssignedFull;来获取数据集合。

来自docs

当访问Eloquent关系作为属性时,关系数据是“延迟加载”。这意味着在您首次访问该属性之前,实际上不会加载关系数据。

而这个$slot->userAssignedFull;是您“第一次访问该物业”。


0
投票

试试这个

$slot = Slot::where('id', $slot_id)->with('userAssignedFull')->first();
$slot->userAssignedFull;
© www.soinside.com 2019 - 2024. All rights reserved.