将嵌套对象插入多个表中

时间:2015-02-04 11:02:53

标签: php mysql codeigniter oop

我有一个对象我想使用CodeIgniter / PHP添加到MySQL数据库。但问题是它还有其他对象的数组,需要插入(或更新)。

我的意思的简化示例:

数据库中的表:

+----------+
| Order    |
+----------+
| - id     |
| - name   |
| - date   |
+----------+

+-------------+
| Orderline   |
+-------------+
| - orderId   |
| - productId |
| - amount    |
+-------------+

我要插入的对象示例:

$order->name = “John Doe”

$orderline1 = new stdClass();
$orderline1->productId = 1;
$orderline1->amount = 10;

$orderline2 = new stdClass();
$orderline2->productId = 2;
$orderline2->amount = 5;

$order->orderlines = array($orderline1, $orderline2);

所以我想在数据库中插入这些,Order-table中的1行和Orderline表中的2行。我正在使用CodeIgniter(因为我必须)。我知道如何插入对象以及如何获取最后插入的ID。但我不确定嵌套对象,我还必须首先将orderId添加到所有订单行。

到目前为止我所拥有的:

$this->db->insert('Order', $order); // no clue what will happen to the $order->orderlines doing this
$orderId = $this->db->insert_id(); // to get the id to add to the orderlines

// a loop to add the orderId
foreach($order->orderlines as $orderline){
    $orderline->orderId = $orderId;
}

// to insert the orderlines
$this->db->insert_batch('orderline', $order->orderlines);

我不确定在插入订单时会发生什么,因为订单表中没有名为orderlines的行。 是否会被忽略或导致错误?这是一个好方法还是我做错了?

1 个答案:

答案 0 :(得分:0)

应该是:

$ this-> db-> insert(' Order',$ order-> name);

此外,您可以使用rollback method查询不成功的案例。