Laravel 5.7访问器,它根据一些可能的匹配项来检查与auth用户的相关性

时间:2018-10-18 21:38:33

标签: php laravel laravel-5 eloquent laravel-5.7

我的模型在relativeTonotRelativeTo上有一些范围:

public function scopeRelativeTo($query, User $user)
{
    $teamIDs = $user->teams->pluck('id');

    $query->where('assigned_user_id', $user->id)
        ->orWhere('reported_by', $user->id)
        ->orWhereIn('assigned_team_id', $teamIDs);
}


public function scopeNotRelativeTo($query, User $user)
{
    $teamIDs = $user->teams->pluck('id');

    $query->where('assigned_user_id', '!=', $user->id)
        ->orWhere('reported_by', '!=', $user->id)
        ->orWhereNotIn('assigned_team_id', $teamIDs);
}

这些帮助基于可能的匹配项构建查询,这些匹配项实质上可以归结为用户是否与对象相关。这些对于查询非常有用,但是我也在尝试在模型上创建一个访问器,该访问器将返回一个布尔值,因此每个对象将动态地知道它与已认证用户的相对性。好主意,但不确定从哪里开始。

public function getRelativityAttribute($value)
{
    $user = User::find(auth('api')->user()->id);
}

有了经过身份验证的用户,并且知道我也可以访问实际的类:$this,我如何才能基于范围中的这些相同检查来检查相对性并返回布尔值?

1 个答案:

答案 0 :(得分:2)

尝试一下:

public function getRelativityAttribute($value)
{
    $user = auth('api')->user();
    if (!$user) {
        return false;
    }

    $userId = $user->getKey();
    return $this->assigned_user_id == $userId || $this->reported_by == $userId
           || $user->teams()->where('id', $this->assigned_team_id)->exists();
}