我想获取数据表单数据库表并在另一个表中创建一个新行。 哪个1 PO有很多PoProducts。
$_getPO = Order::find($id);
$_getPOProducts= OrderProducts::where('order_id', $id)->get();
$order_no = $_getPO->order_no;
$eta = $_getPO->eta;
$_Order = new DeliveryOrders();
$_Order->order_no = $order_no;
$_Order->eta = $eta;
$_Order->save();
$POProduct = array();
foreach($_getPOProducts as $i => $_getPOProduct)
{
$POProduct[] = new DeliveryOrderProducts();
$POProduct[] = $_getPOProduct->order_id;
$POProduct[] = $_getPOProduct->item_id;
$POProduct[] = $_getPOProduct->qty;
$POProduct->save();
}
但是,输出错误。
Call to a member function save() on array
请帮帮我。感谢。
答案 0 :(得分:3)
您正在尝试在阵列上运行save
方法,但您想要的是在数组索引上使用它。
将您的foreach
更改为此,它应该有效(假设列相同)。
foreach($_getPOProducts as $i => $_getPOProduct)
{
$POProduct[$i] = new DeliveryOrderProducts();
$POProduct[$i]->order_id = $_getPOProduct->order_id;
$POProduct[$i]->item_id = $_getPOProduct->item_id;
$POProduct[$i]->qty = $_getPOProduct->qty;
$POProduct[$i]->save();
}
您可以使用forceCreate
缩短此内容。
foreach($_getPOProducts as $i => $_getPOProduct)
{
$POProduct[$i] = (new DeliveryOrderProducts())->forceCreate($_getPOProduct->only(['order_id', 'item_id', 'qty']));
}
答案 1 :(得分:0)
如果您希望将记录从一个表复制到另一个表,或者只是复制同一表中的记录,则可以简单地使用repliacate()
方法。
$user = User::findOrFail($id);
// replace the data
$staff = $user->replicate();
// make into array for mass assign.
//make sure you activate $guarded in your Staff model
$staff = $user->toArray();
Staff::firstOrCreate($staff);
注意:在本例中,如果您只是在同一张表上重复,则将Staff
替换为User
。