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

我有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_name


1             2            1            3          A

3             2            4            1          B

1             3            1            4          c

验证就像 subject_name "A" 对于 1, 2, 1, 3 是唯一的。 B 对于 3, 2, 4, 1 是唯一的。但是 subject_name "A" 对于 2,2,1,3 不是唯一的,依此类推。


临摹微笑
浏览 136回答 1
1回答

DIEA

*** 与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)    ],    ...]);
打开App,查看更多内容
随时随地看视频慕课网APP