Массовое присвоение Laravel без сохранения полей

У меня есть 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 стол, потому что они связаны.

Большое спасибо за вашу помощь.

0

Решение

Вы переопределяете 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').
])
0

Другие решения

Вы не можете иметь 'name' => Str::title('clinic_name') когда используешь create(), это должен быть один ключ как 'name',

Перед созданием пользователя вы можете использовать следующее:

$request->replace('name' => Str::title('clinic_name'));
0

По вопросам рекламы [email protected]