首页 > 解决方案 > 如何在 Laravel 的模态中指定创建函数的可为空值?

问题描述

在模型中,我们如何使用 create 函数插入一个可以为空的已验证字段?例如,在 RegisterController 中:基本验证器 + 创建函数。如果我没有发送google_idfacebook_id,create 函数在字段上返回一个未定义的索引(显然)。插入它们的正确方法是什么?

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['nullable', 'email', 'unique:users'],
        'google_id' => ['nullable', 'string', 'unique:users'],
        'facebook_id' => ['nullable', 'string', 'unique:users'],
        'twitter_id' => ['nullable', 'string', 'unique:users'],
        'phone' => ['required', 'string', 'max:10', 'min:10', 'unique:users', "regex:/(^[1-9][0-9]*$)/"],
        'country_code' => ['required', 'string', 'max:255', 'exists:'.config('countries.table_name').',calling_code'],
        'password' => ['required', 'string', 'min:8'],
    ]);
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'phone' => $data['country_code'].$data['phone'],
        'google_id' => $data['google_id'] ? $data['google_id'] : null,
        'facebook_id' => $data['facebook_id'] ? $data['facebook_id'] : null,
        'twitter_id' => $data['twitter_id'] ? $data['twitter_id'] : null,
        'password' => Hash::make($data['password']),
    ]);
}

我知道这是一个基本问题,我知道如何忽略它们,但我需要知道正确的格式是什么。

标签: phplaraveleloquentlaravel-6

解决方案


使用 php 7 中可用的新格式

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'phone' => $data['country_code'].$data['phone'],
            'google_id' => $data['google_id']??null,
            'facebook_id' => $data['facebook_id']??null,
            'twitter_id' => $data['twitter_id']??null,
            'password' => Hash::make($data['password']),
        ]);
    }

推荐阅读