Php Laravel中的一对一关系是否总是需要优先()?
我在用户和用户设置模型之间有一对一的关系 但是(在Php Laravel中的一对一关系是否总是需要优先()?,php,laravel,Php,Laravel,我在用户和用户设置模型之间有一对一的关系 但是(在$user=auth()->user()之后)当我尝试$user->settings()->something时,它会抛出一个未定义的属性错误 当我使用$user->settings()->first()->something时,它就消失了 我的问题是,它应该是这样工作的吗?还是我做错了什么?此代码将为您提供收集结果 $user->settings; 因此调用“something”不可用,或者它将返回null,除非您获得它的特定索引 $u
$user=auth()->user()
之后)当我尝试$user->settings()->something
时,它会抛出一个未定义的属性
错误
当我使用$user->settings()->first()->something
时,它就消失了
我的问题是,它应该是这样工作的吗?还是我做错了什么?此代码将为您提供收集结果
$user->settings;
因此调用“something”不可用,或者它将返回null,除非您获得它的特定索引
$user->settings()->something
而这个方法之所以有效,是因为您使用first()获取了集合的第一个数据并访问了它的属性
$user->settings()->first()->something
第一个方法返回集合中通过给定真值测试的第一个元素
请参见此处的文档您不能直接运行
$user->settings()->某些内容
因为当您调用$user->settings()
时,它只返回对象
因此,它不是模型的对象,您需要获取模型的对象,并像这样调用其属性
$user->settings()->first()->something;
动态特性 因为
用户
和用户设置
之间存在一对一的关系
如果用户模型中存在一对一关系:
公共功能设置()
{
返回$this->hasOne('App\Models\UserSettings','user\u id','id');
}
据
一旦定义了关系,我们就可以使用Eloquent的动态属性来检索相关记录。动态属性允许您访问关系方法,就像它们是在模型上定义的属性一样:
Eloquent将自动为您加载关系,甚至可以聪明地知道是调用get(对于一对多关系)还是first(对于一对一关系)方法。然后,可以通过与关系同名的动态属性访问它
所以你可以用这样的雄辩:
$user->settings->something;//设置是$user的动态属性。
Auth只提供用户信息
请尝试以下代码:
$user = User::find(auth()->user()->id);//and then
$user->settings->something;
如果要获取用户
设置
本身,只需执行以下操作:
$user->settings
然后,您可以通过以下操作获取设置字段:
$user->settings->something
当您执行此操作时,
$user->settings()
您可以在此之后链接查询。例如
$user->settings()->where('something', 'hello')->first()
这就是为什么
$user->settings
和$user->settings()->first()
的输出是相同的 您是否尝试过$user->settings->something
您可以从您的用户那里分享您的settings()方法吗model@RonakDhoot非常感谢。使用$user->settings->something
而不是$user->settings()->something
修复了它!