在 Laravel 验证规则中使用模型范围

Use Model Scope in Laravel Validation Rule

我有这样的规则:

Rule::exists('tokens', 'key')
    ->where(function ($q) {
        $q->where('state', 'unused');
    })

但我正在尝试访问实际的 Token 模型范围,这样我就可以 ->unused() 而不是重复我的查询。

Rule::exists(\App\Models\Token::class, 'key')
    ->where(function ($q) {
        $q->unused();
    })

它似乎获得了一个查询生成器,但不是来自 Token 模型。

我尝试了一些变体,将 Token 模型作为参数而不是 tokens table 名称作为参数传递,但它只会抛出 call to undefined method 的错误。

有办法吗?

正如您已经注意到的;您可以访问查询生成器而不是模型。你可以做的是新建一个模型,直接使用示波器。

use App\Models\Token;

Rule::exists('tokens', 'key')
    ->where(function ($q) {
        (new Token)->scopeUnused($q);
    });