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

Rob*_*Rob 4 php laravel laravel-5 laravel-validation

我有一个这样的规则:

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

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

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

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

我已经尝试了一些变体,将Token模型作为参数而不是tokens表名传入,但它只会为call to undefined method.

有没有办法做到这一点?

Roy*_*Roy 7

正如你已经注意到的那样;您可以访问查询构建器而不是模型。您可以做的是新建一个模型并直接使用范围。

use App\Models\Token;

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