Laravel访问关系——检查数据是否存在于模型中


Laravel accessing relationships - check if data exists from within the model

假设我有一个具有一对多关系的UserGroup模型。用户可以属于0组或1组。组可以有多个用户

当我显示一个用户列表时,我还想显示他的组名——如果他属于一个组的话。所以我这样做:

$user->group()->first()->name

如果用户不属于一个组,这当然会抛出一个错误。

所以我这样做:

!empty($user->group) ? $user->group()->first()->name : 'No group here'

现在在我的实际应用程序中,不只是group。我在视图中循环了更多的关系。Like, role, account等

所以我不想用那个把视图弄乱。是否有一种方法来检查数据是否存在于模型中?

也许是这样的?

class User extends Model
{
    // .. snip
    public function group()
    {
        if (empty($this->group)) {
            return 'Nothing here';
        }
        return $this->hasOne(App'Group::class);
    }
}

我是不是走错路了?这个已经可用了吗?我没有在文档或谷歌上看到任何可以帮助我解决这个问题的东西(也许是在搜索错误的单词?)。

如果有人能给我指个方向,那就太好了。

您可以在您的User模型中创建一个accessor方法,例如:

public function getGroupNameAttribute()
{
    $this->group ? $this->group->name : 'Oops! Nothing.';
}

在视图中,你可以这样写:

{{ $user->group_name }}

输出将是组名或Oops! Nothing.