У меня есть 2 таблицы в одной функции, в которую я хотел бы сохранить данные. Одним из них является Users
стол, а второй Clinic
Таблица.
Моя таблица пользователей в настоящее время работает правильно, но я не уверен, что это «лучшая практика»:
$user = User::create([
'name' => Str::title($request->get('name')),
'email' => $request->get('email'),
'password' => bcrypt($request->get('password'))
])
->clinic()->create($request->only([
'name' => Str::title('clinic_name'),
'telephone',
'address_1',
'address_2',
'city',
'postcode'
]));
Моя проблема возникает в столбце «имя» Clinic
Таблица. Он просто не сохраняет его, хотя в моем массиве $ fillable Clinic
колонка:
protected $fillable = ['user_id', 'name', 'telephone'', 'address_1',
'address_2', 'city', 'postcode'];
Я попытался объединить методы в цепочку, так как хочу сохранить ‘user_id’ внутри Clinic
стол, потому что они связаны.
Большое спасибо за вашу помощь.
Вы переопределяете name
введите ваш $request->only()
вызов:
$user = User::create([
'name' => Str::title($request->get('name')),
'email' => $request->get('email'),
'password' => bcrypt($request->get('password'))
])->clinic()->create($request->only([
'name' => Str::title('clinic_name'), // This is overriding your 'name' field.
'telephone',
'address_1',
'address_2',
'city',
'postcode'
]));
Если вы хотите запустить Str::title()
по просьбам clinic_name
вам нужно будет вручную присвоить атрибуты следующим образом:
$user = User::create([
'name' => Str::title($request->get('name')),
'email' => $request->get('email'),
'password' => bcrypt($request->get('password'))
])->clinic()->create([
'name' => Str::title($request->get('clinic_name')),
'telephone' => $request->get('telephone'),
'address_1' => $request->get('address_1'),
'address_2' => $request->get('address_2'),
'city' => $request->get('city'),
'postcode' => $request->get('postcode'),
]);
ЗаметкаВ качестве подсказки вы также можете просто получить входные данные запроса в виде свойства, например:
->create([
'name' => $request->name // Performs $request->get('name').
])
Вы не можете иметь 'name' => Str::title('clinic_name')
когда используешь create()
, это должен быть один ключ как 'name'
,
Перед созданием пользователя вы можете использовать следующее:
$request->replace('name' => Str::title('clinic_name'));