Laravel: 使用闭包时使验证规则失败

Laravel: make validation rule fail when using closure

假设我有一个自定义逻辑来验证 FormRequest 字段的唯一性,需要在数据库中找到另一个资源,如下所示:

class CreateMyResourceRequest extends FormRequest {
public function rules() {
        return [
            'my_field' => [
                Rule::unique('some_other_resource', 'some_column')
                    ->where(function ($query) {
                        $otherResource = SomeOtherResource::where(...)->firstOrFail();

                        // Process the retrieved resource
                    }),
            ]

firstOrFail() 调用显然使请求失败并返回 404 - 未找到,而我想 return 返回 422 并在字段上出现验证错误。

有没有办法在仍然使用框架提供的 Rule::unique() 的同时实现这一点?

提前致谢!

不要使用 firstOrFail,而只需使用 first 并检查输出是否为空。如果是,return false.

或者,更Laravel的方法是:

$query->leftJoin('otherresource', 'primarykey', 'foreignkey')->where(...)

我建议如下

public function rules()
{
    return [
        "your_field" => ["you_can_have_more_validations_here", function($key, $value, $cb) {

            $queryResult = SomeModel::find(1);

            if (someCondition) {
                $cb("your fail message");
            }
        }]
    ];
}

$cb 运行 验证将失败并返回 422