Laravel,用一种雄辩的关系将行复制到另一张表

时间:2018-02-24 04:53:25

标签: php laravel-5

我想获取数据表单数据库表并在另一个表中创建一个新行。 哪个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

请帮帮我。感谢。

2 个答案:

答案 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