Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel:如何加载&x27;属于';作为动态属性?_Laravel_Eloquent_Relationships - Fatal编程技术网

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);
    } 
    
Laravel使用一个系统来检查属性,而不在模型类中声明它们,您应该尽量避免将名称与关系匹配。通常,您希望将状态的id存储在用户表上,并调用它
state\u id
,这样关系就不会与它发生冲突

使用
$user->state()->first()
不是正确的解决方案,因为您将丢失该功能,这是100%建议的

您可以执行以下操作:

  • 将用户表中的属性重命名为非
    state
    ,例如:
    user\u state
  • 将关系重命名为与用户的属性不匹配,例如:

    public function stateRelation()
    {
        return $this->belongsTo(State::class);
    } 
    
Laravel使用一个系统来检查属性,而不在模型类中声明它们,您应该尽量避免将名称与关系匹配。通常,您希望将状态的id存储在用户表上,并调用它
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
时,它成功了!!!