我是laravel的新手,我想一步掌握主/细节!
我有以下课程
Master => hasMany(Items)
和
项目=>属于(主)
所以,在我的控制器中,我想创建一个Master实例和许多Items实例,并将它们持久保存在一个步骤中……像这样
$master = new Master();
$master->field = $someField;
foreach ($myArray as $var) {
$item = new Item();
$item->someField = $field;
// I suppose I need to relate Item with master, but... how?
}
and here y want to persist all objectes like that
$master->save(); and Eloquent must to persist Master and Items...
但是我更喜欢先不坚持大师……
有可能吗? 我不知道该怎么做...
预先感谢
尼古拉斯
答案 0 :(得分:0)
由于母版有一个项目,因此必须先保存该母版,因此我们具有母版ID,并且可以与这些项目关联。 以此方式更改代码
$master = new Master();
$master->field = $someField;
$master->save();
foreach ($myArray as $var) {
$item = new Item();
$item->someField = $field;
$item->master_id = $master->id;
$item->save();
}
答案 1 :(得分:0)
您可以使用transaction()
外观中的DB
方法包装整个内容:
$bar = 'bar';
DB::transaction(function () use ($bar) {
$master = new Master();
$master->foo = $bar;
$items = [];
foreach ($myArray as $var) {
$item = new Item();
$item->someField = $field;
$items[] = $item;
}
$master->save();
$master->items()->saveMany($items);
});
这将自动捕获任何异常,回滚事务,然后重新抛出。
或者您可以使用DB::beginTransaction()
,DB::rollBack()
和DB::commit()
手动进行操作。