如何在 Laravel 中的模态创建函数中指定可为 null 的值?
How to specify a nullable value on create function in modal in Laravel?
在模型中,我们如何能够使用创建函数插入可为空的验证字段?例如,在 RegisterController 中:基本验证器 + 创建函数。如果我没有向 google_id
或 facebook_id,
发送创建函数 returns 字段上的未定义索引(显然)。插入它们的正确方法是什么?
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']),
]);
}
我知道这是一个基本问题,我知道如何忽略它们,但我需要知道正确的格式是什么。
使用 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']),
]);
}
我会在这里使用 collect
:
$data = collect($data);
可以调用->get
方法,如果找不到索引,默认会returnnull
$data->get('facebook_id');
或者,您也可以使用 data_get
,这是另一个漂亮的 Laravel 帮助程序,可以让您避免改变数组本身。
data_get($data, 'facebook_id', null)
最后,如果您的数据库设置为架构中的值为 nullable()
,您可以使用 ->only()
:
User::create(collect($data)->only([...fields]));
这还需要在模型上设置适当的 fillable
属性:
protected $fillable = [...fields];
在模型中,我们如何能够使用创建函数插入可为空的验证字段?例如,在 RegisterController 中:基本验证器 + 创建函数。如果我没有向 google_id
或 facebook_id,
发送创建函数 returns 字段上的未定义索引(显然)。插入它们的正确方法是什么?
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']),
]);
}
我知道这是一个基本问题,我知道如何忽略它们,但我需要知道正确的格式是什么。
使用 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']),
]);
}
我会在这里使用 collect
:
$data = collect($data);
可以调用->get
方法,如果找不到索引,默认会returnnull
$data->get('facebook_id');
或者,您也可以使用 data_get
,这是另一个漂亮的 Laravel 帮助程序,可以让您避免改变数组本身。
data_get($data, 'facebook_id', null)
最后,如果您的数据库设置为架构中的值为 nullable()
,您可以使用 ->only()
:
User::create(collect($data)->only([...fields]));
这还需要在模型上设置适当的 fillable
属性:
protected $fillable = [...fields];