相关疑难解决方法(0)

如何为 laravel 验证器的自定义存在规则添加连接?

laravel 中的验证器可以自定义现有数据库规则,例如,如果您需要检查额外的列。手册中的一个例子:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::exists('staff')->where(function ($query) {
            $query->where('account_id', 1);
        }),
    ],
]);
Run Code Online (Sandbox Code Playgroud)

query在封闭不typehinted,所以我不是很积极,这是什么样的对象。我可以看到DatabaseRule本身只具有的一些功能wherewherenot等等,但我期待添加一个加入进来。

给定的例子说电子邮件必须存在于具有 的员工account_id = 1,但是如果团队(所有员工都是团队的一部分,这是一个单独的表)应该具有某个属性,例如team.active = 1
整个员工/团队的事情当然是一个例子


所以最后我想知道:我如何向这个规则添加一个连接,以便我们确保员工的团队有一个为 1 的“活动”列。

我的第一个问题可能是:那是什么类型的$query我想像这样的事情会很棒,但没有理由怀疑这是有效的:

Rule::exists('staff')->where(function ($query) {
    $query
        ->join('team', 'team.team_id', '=', 'staff.team_id')
        ->where('team.active', 1);
})
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用。奇怪的是join本身并没有报错,而是好像被忽略了:

未找到列:
1054 “where 子句”中的未知列“team.active”
(SQL:从staffwhere email= -thevalue- 和 ( team. active= 1) 中选择 count(*) …

join laravel illuminate-container laravel-5 laravel-validation

6
推荐指数
1
解决办法
3409
查看次数