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() 手动完成。

https://laravel.com/docs/5.7/database#database-transactions