Laravel 列名和关系名相同

Laravel column name and relationship name same

列名和关系名可以相同吗?

示例:

我在 mack.php model 中有一列 edited_by,我想获得用户的完整详细信息用户 table 在 edited_by 中提到,所以我的关系如下

public function edited_by(){
        return $this->hasOne('App\User','id','edited_by');
    }

现在,如果我尝试访问 $model->edited_by->first_name 它的抛出错误 'trying to get property of non-object'

除了使用不同的名称之外,还有什么办法可以解决这个问题吗?

简短的回答是否定的。您不能让它们具有相同的名称,因为如果找到该列,将始终返回该列,并且如果找到具有该名称的列,则永远不会返回关系。

将列名称更改为 user_id 比 edited_by 更合适。它更具描述性,也是 Eloquent 将查找的默认 ID。同样,将关系名称命名为 user() 而不是 edited_by() 更有意义,因为它 returns 一个用户型号.

稍长且完全不正确的答案是您可以通过 $model->edited_by()->first_name 访问关系虽然会导致不必要的额外查询 运行。