为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 检查多个字段的独特验证

Laravel 检查多个字段的独特验证

PHP
临摹微笑 2023-08-11 16:19:48
我有subject表和字段是standard_id、stream_id、medium_id、board_id和subject_name许多其他字段。我想添加唯一的规则,该规则对于, , ,字段subject_name是唯一的。standard_idstream_idmedium_idboard_id$validator = Validator::make( $inputs,             [                'v_name' => [                        'required',                        Rule::unique( 'tbl_subject' )->ignore( $id, 'id' ),                    ],            ],            [                'v_name.required' => 'Name is required',                'unique' => 'Name address already exits.',            ]        );例子standard_id, stream_id, medium_id, board_id subject_name1             2            1            3          A3             2            4            1          B1             3            1            4          c验证就像 subject_name "A" 对于 1, 2, 1, 3 是唯一的。 B 对于 3, 2, 4, 1 是唯一的。但是 subject_name "A" 对于 2,2,1,3 不是唯一的,依此类推。
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

*** 与OP讨论后***

问题应该说明他们正在尝试插入一条记录,并希望验证数据库的唯一性。一种方法是通过自定义规则,如下所示:

class UniqueSubject implements Rule

{

    private $keys;


    public function __construct(array $keys) {

        $this->keys = $keys;

    }


    /**

     * Determine if the validation rule passes.

     *

     * @param  string  $attribute

     * @param  mixed  $value

     * @return bool

     */

    public function passes($attribute, $value)

    {

        return ! Subject::where($this->keys)->where('subject_name', $value)->exists();

    }


    /**

     * Get the validation error message.

     *

     * @return string

     */

    public function message()

    {

        return 'The Subject Name must be unique for the given standard, stream, medium and board.';

    }

}

然后您可以在规则中使用验证,例如:


$keys = $request->only('i_standard_id', 'i_stream_id', 'i_board_id', 'i_medium_id');


$validator = Validator::make( $inputs, [

    ...

    'subject_name' => [

        'required',

        'string',

        new UniqueSubject($keys)

    ],

    ...

]);



查看完整回答
反对 回复 2023-08-11
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信