Laravel 通过 HasMany 关系级联插入
Laravel Cascade Insert throught HasMany relationship
我是laravel新手,想一步步坚持Master/Detail!
我有以下类
大师 => 有许多(物品)
和
物品 => 属于(主人)
所以,在我的 Controller 中,我想创建一个 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...
但我更喜欢先不坚持 Master...
可能吗?
我不明白该怎么做...
提前致谢
尼古拉斯
既然master有一个物品,那么master必须先保存下来,这样我们就有了master 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();
}
您可以使用 DB
外观中的 transaction()
方法包装整个内容:
$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()
手动完成。
我是laravel新手,想一步步坚持Master/Detail!
我有以下类
大师 => 有许多(物品)
和
物品 => 属于(主人)
所以,在我的 Controller 中,我想创建一个 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...
但我更喜欢先不坚持 Master...
可能吗? 我不明白该怎么做...
提前致谢
尼古拉斯
既然master有一个物品,那么master必须先保存下来,这样我们就有了master 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();
}
您可以使用 DB
外观中的 transaction()
方法包装整个内容:
$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()
手动完成。