Причина, по которой вы столкнулись с этой проблемой, заключается в том, что $request->input()
будет возвращать массив, а не объекты, поэтому по большей части вы просто пытались получить доступ к свойству неверным способом, т.е. $options->name
должно было быть $options['name']
.
Во-вторых, $option->values()->createMany($request->input('options.*.values'));
также не сработал бы, так как он бы возвратил вложенный массив всех значений, а не только значений для этой опции.
Следующее должно дать вам то, что Вы после:
foreach ($request->input('options') as $option) {
$option = Option::create([
'name' => $option['name'],
'type' => $option['type'],
'is_required' => (boolean)$option['is_required'],
]);
$option->values()->createMany($option['values']);
}
Это просто К вашему сведению.
Я бы порекомендовал использовать свойство $ casts внутри вашей модели Eloquent, если вы ' еще не:
protected $casts = [
'is_required' => 'boolean',
];
Таким образом, вы можете сказать Eloquent, что is_required
должен быть логическим, и вам не нужно будет разыгрывать его самостоятельно, так что в вашем foreach l oop
'is_required' => (boolean)$option['is_required'],
будет просто
'is_required' => $option['is_required'],