将关系的存在评估为真或假 - Laravel 关系

Evaluate existence of relationship as true or false - Laravel Relationships

我正在尝试创建如下策略:

public function view(User $user, PersonalStatement $personalStatement)
{

    return $user->applicant->id == $personalStatement->applicant_id || $user->mentor->exists();

}

然后我使用存在导师关系但不存在应聘者关系的用户模型对其进行测试,我收到错误消息:

Trying to get property 'id' of non-object

我相信这是因为在这种情况下用户->申请人returns null。

评估模型是否具有响应为真或假的关系的最佳方法是什么?

使用 exists() 方法 returns 如果关系不存在则为 null。

要处理 null 情况,您可以使用 optional Laravel 助手,它允许您调用任何 property/method 即使您的源为空,它 returns null 而不是抛出异常。

public function view(User $user, PersonalStatement $personalStatement)
{

    return optional($user->applicant)->id == $personalStatement->applicant_id || $user->mentor->exists();

}

要检查 'User' 模型的“申请人”关系,请尝试

$user->applicant()->exists()


$user->applicant()->count()

注意:关系后面的括号确实很重要。