php 如何根据用户要求,使表中要求唯一的两列

g6ll5ycj  于 2023-01-19  发布在  PHP
关注(0)|答案(3)|浏览(128)

我已尝试验证用户请求,如下所示:

$data = $request->validate([
            'fname' => 'nullable',
            'lname' => 'nullable',
            'gender' => 'required',
            'mobile' => 'required|unique:users,usr_name',
            'ncode' => 'nullable',
            'password' => 'required',
            'password_confirmation' => 'required',
        ]);

如您所见,我已经说过mobile字段的值必须为unique:users,usr_name,但我确实需要检查它在members表(mbr_mobile列)中是否也是唯一的:

unique:members,mbr_mobile

那么如何将这两个规则同时结合起来呢?

yh2wf1be

yh2wf1be1#

只需指定模型名称就可以了。

'mobile' => 'required|unique:User|unique:Members',

但您也可以指定列名。

'mobile' => 'required|unique:User, mobile|unique:Member,mbr_mobile',
bksxznpy

bksxznpy2#

您可以按照与用户表完全相同的方式执行此操作:

$data = $request->validate([
        'fname' => 'nullable',
        'lname' => 'nullable',
        'gender' => 'required',
        'mobile' => 'required|unique:users,usr_name|unique:members,mbr_mobile',
        'ncode' => 'nullable',
        'password' => 'required',
        'password_confirmation' => 'required',
    ]);
iovurdzv

iovurdzv3#

您可以使用Rule类创建检查多个表的唯一性的自定义验证规则。在这种情况下,您将创建检查users表的usr_name列和members表的mbr_移动的列的唯一性的规则。
您可以在rules文件夹中创建一个新规则,并将其命名为UniqueMobile。

use Illuminate\Validation\Rule;

class UniqueMobile
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return !(
            DB::table('users')->where('usr_name', $value)->exists() ||
            DB::table('members')->where('mbr_mobile', $value)->exists()
        );
    }
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute is already taken.';
    }
}

然后,您可以在验证中使用此规则,如下所示:

$data = $request->validate([
            'fname' => 'nullable',
            'lname' => 'nullable',
            'gender' => 'required',
            'mobile' => [
                'required',
                new UniqueMobile
            ],
            'ncode' => 'nullable',
            'password' => 'required',
            'password_confirmation' => 'required',
        ]);

它将检查移动的号码是否已经存在于用户和成员表中。

相关问题