4 回答
TA贡献1802条经验 获得超10个赞
此代码将为您提供收集结果。
$user->settings;
所以调用“某事”是不可用的,否则它将返回 null,除非你得到它的特定索引。
$user->settings()->something
而这个之所以有效,是因为您使用 first() 获取了集合的第一个数据并访问了它的属性。
$user->settings()->first()->something
第一个方法返回集合中通过给定真值测试的第一个元素,请参阅此处的文档 laravel docs
TA贡献2019条经验 获得超9个赞
如果您想获取用户settings
本身,只需执行以下操作:
$user->settings
然后,您可以获得设置的字段:
$user->settings->something
执行此$user->settings()
操作后,您可以链接查询。例如
$user->settings()->where('something', 'hello')->first()
这就是为什么 和 的输出$user->settings
是$user->settings()->first()
相同的。
TA贡献1821条经验 获得超6个赞
Auth 只为您提供用户信息;
试试下面的代码:
$user = User::find(auth()->user()->id);//and then
$user->settings->something;
TA贡献1840条经验 获得超5个赞
您不能直接运行$user->settings()->something.
因为当您调用时$user->settings(),它只返回Illuminate\Database\Eloquent\Relations\HasOne对象。
所以它不是模型的对象,你需要获取模型的对象并像这样调用它的属性。
$user->settings()->first()->something;
动态属性
User由于您在和之间具有一对一的关系UserSettings。
如果您的用户模型中有一对一的关系:
public function settings()
{
return $this->hasOne('App\Models\UserSettings', 'user_id', 'id');
}
根据Laravel 文档
一旦定义了关系,我们就可以使用 Eloquent 的动态属性来检索相关记录。动态属性允许您访问关系方法,就好像它们是在模型上定义的属性一样:
Eloquent 会自动为你加载关系,甚至可以知道是调用 get(对于一对多关系)还是 first(对于一对一关系)方法。然后可以通过与关系同名的动态属性访问它。
所以你可以像这样使用 eloquent 的动态属性:
$user->settings->something; // settings is the dynamic property of $user.
- 4 回答
- 0 关注
- 125 浏览
添加回答
举报