在Laravel Gate中获取用户ID

最后发布: 2020-07-09


问题

我做了很多研究,但不明白如何获取用户id(不是父用户的id)。我有父和用户,父是管理用户的人。

父用户是一个在线用户。

我需要检查编辑后的用户是否有余额。

@can('can-device', dd($user->id)) /返回用户id。

/闸门

Gate::define('can-device', function (User $user) {
    dd(user->id) //return parent id
    return $user->hasBalance();
});


    // User model
    @property int $id
 * @property integer $parent_id
 * @property string $name
 * @property string $email
 * @property string $password
 * @property string $phone
 * @property string $role
 * @property string $status
 * @property integer $balance
 * @property float $discount


public function hasBalance(): bool
{
    return $this->balance !== 0;
} 

 public function parent()
{
    return $this->belongsTo(static::class, 'parent_id', 'id');
}

public function children()
{
    return $this->hasMany(static::class, 'parent_id', 'id');
}


@can('can-device', $user)
<a href="{{ route('admin.devices.create', ['userId' => $user]) }}"

如何获得用户ID?

谢谢你的帮助。

laravel
回答

你可以利用 Laravel 集合函数every,其中集合中的所有元素都必须满足给定的条件,为了语法上的方便,我使用了一个高阶函数调用。当我使用 ->children.

Gate::define('can-device', function (User $user) {
    return $user->hasBalance() && $user->children->every->hasBalance();
});

编辑

你可以利用过滤器,只获取有余额的用户。

$user->children->filter('balance')->every->hasBalance()