据我所知,Eloquent没有提供类似的东西。您需要单独保存每个。我可以建议这样的事情:
$shelf = Shelf::create($request->only(['name', 'location'])); foreach ( $request->input('boxes') as $box ) { $box = new Box($box); $shelf->boxes()->save($box); $pTemp = []; foreach ( $box['products'] as $product ) { $pTemp[] = new Product($product); } $box->products()->saveMany($pTemp); }
为了最大限度地减少运行查询的次数,我们可以循环遍历所有框,创建它们然后再循环遍历它们以创建所有产品。你仍然需要为每个盒子运行一个查询来创建产品,但据我所知,没有办法解决这个问题。
$shelf = Shelf::create($request->only(['name', 'location'])); $bTemp = []; foreach ( $request->input('boxes') as $i => $box ) { $bTemp[$i] = new Box($box); } $shelf->boxes()->saveMany($bTemp); foreach ( $request->input('boxes') as $i => $box ) { $pTemp = []; foreach ( $box['products'] as $product ) { $pTemp[] = new Product($product); } $bTemp[$i]->products()->saveMany($pTemp); }