Laravel列名和关系名相同

时间:2016-05-17 04:44:02

标签: laravel relationship

我可以将列名和关系名称相同吗?

示例:

我在 mack.php 模型中有一个edit_by列,我想从用户表中获取edit_by中提到的用户的完整详细信息,所以我有如下关系

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

现在,如果我尝试访问 $ model-> edited_by-> first_name ,则抛出错误'试图获取非对象的属性'

除了有不同的名字之外,还有什么方法可以修复它吗?

1 个答案:

答案 0 :(得分:2)

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

将列名更改为user_id比edit_by更合适。它更具描述性,也是Eloquent寻找的默认ID。类似地,关系名称更有意义地命名为 user()而不是 edited_by(),因为它返回用户模型。

稍长且完全不正确的答案是您可以使用 $ model-> edited_by() - > first_name 访问该关系,这将导致额外的查询被不必要地运行。 / p>