首页 > 解决方案 > 复杂更新验证的逻辑应该放在哪里?

问题描述

我正在与我的团队讨论并使用 Laravel 框架。

验证对作为关系的现有模型属性的更新需要一些数据库调用以确保它符合约束条件。

我的第一个想法是创建一个自定义验证器,但是,这需要在验证器中进行查询。一种是让模型被更新,一种是获得存在的关系,另一种是获得它也将被更新的关系。这个验证器也只会用于更新这个模型上的这个属性。

或者,这可以通过事件进行验证,但我不确定保留该验证逻辑的最佳位置。

任何建议将不胜感激。

标签: laravellaravel-5model-view-controllercrud

解决方案


Laravel 的自定义验证规则几乎就是为此而制定的

use Illuminate\Validation\Rule;

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

您可以将任何您想要的约束放在查询中,只要返回至少 1 条记录,它就会通过


推荐阅读