Laravel:如何加载&x27;属于';作为动态属性?
我有两种型号:Laravel:如何加载&x27;属于';作为动态属性?,laravel,eloquent,relationships,Laravel,Eloquent,Relationships,我有两种型号:user和state。一个状态是用户居住的地方,因此一个状态有许多用户,而一个用户属于一个状态 在我的用户模型中,我有一个归属关系,如下所示: public function state() { return $this->belongsTo(State::class); } 当我访问$user->state时,我想要db查询的结果,但是由于$user有一个state值,它会返回该值。有没有办法通过配置来改变这种行为 我尝试创建一个getStateAttribute
user
和state
。一个状态是用户居住的地方,因此一个状态有许多用户,而一个用户属于一个状态
在我的用户模型中,我有一个归属关系,如下所示:
public function state()
{
return $this->belongsTo(State::class);
}
当我访问$user->state
时,我想要db查询的结果,但是由于$user
有一个state值,它会返回该值。有没有办法通过配置来改变这种行为
我尝试创建一个getStateAttribute()
方法,并返回$this->belongsTo(State::class)
,但Laravel不喜欢这样。目前,检索state对象的唯一方法是:
$user->state()->first();
当属性名为两个单词时,例如$user->firstName
,问题就不存在了,因为我的列名都是蛇形的(即没有命名冲突)。您可以执行以下操作:
- 将用户表中的属性重命名为非
,例如:state
user\u state
- 将关系重命名为与用户的属性不匹配,例如:
public function stateRelation() { return $this->belongsTo(State::class); }
state\u id
,这样关系就不会与它发生冲突
使用$user->state()->first()
不是正确的解决方案,因为您将丢失该功能,这是100%建议的您可以执行以下操作:
- 将用户表中的属性重命名为非
,例如:state
user\u state
- 将关系重命名为与用户的属性不匹配,例如:
public function stateRelation() { return $this->belongsTo(State::class); }
state\u id
,这样关系就不会与它发生冲突
使用
$user->state()->first()
不是正确的解决方案,因为您将丢失该功能,这是100%建议的您应该将用户表中的state属性更改为state\u id,然后您可以像
$user = User::find(useridhere)->with('state');
$user->state->country;
您应该将user表中的state属性更改为state\u id,然后您可以像
$user = User::find(useridhere)->with('state');
$user->state->country;
我也有同样的问题。在我的函数中,名字是
作者
,但它不起作用。但当我改为creator
时,它成功了!!!我也有同样的问题。在我的函数中,名字是作者
,但它不起作用。但当我改为creator
时,它成功了!!!