[英]Insert single record, get last inserted ID and then do multiple insert
我有一個表單,提交時想插入一個記錄,然后獲取最后插入的ID,然后將多行插入另一個表。
我可以正確地理解第一部分,而第二部分則不能。
public function save($data)
{
$this->customer_id = $data['customer_id'];
$this->description = $data['description'];
$this->line_description = $data['line_description'];
$this->line_amount = $data['line_amount'];
$this->validate();
if (empty($this->errors)) {
$db = static::getDB();
$stmt = $db->prepare("INSERT INTO `invoices` (`customer_id`) VALUES (:customer_id)");
$stmt->bindValue(":customer_id", $this->customer_id, PDO::PARAM_INT);
$stmt->execute();
$last_id = $db->lastInsertId();
$db = static::getDB();
$stmt = $db->prepare("INSERT INTO `lines` (`description`, `amount`, `invoice_id`) VALUES (:description, :amount, :invoice_id)");
$stmt->bindValue(":description", $this->line_description, PDO::PARAM_STR);
$stmt->bindValue(":amount", $this->line_amount, PDO::PARAM_STR);
$stmt->bindValue(":invoice_id", $last_id, PDO::PARAM_INT);
// foreach loop here ?
$stmt->execute();
// end foreach
}
}
如果var_dumped,則公共函數save($ data)中的$ data看起來像這樣
array(5) {
["customer_id"]=> string(2) "16"
["description"]=> string(4) "test"
["amount"]=> string(0) ""
["line_description"]=> array(2) {
[0]=> string(5) "desc1"
[1]=> string(4) "desc"
}
["line_amount"]=> array(2) {
[0]=> string(3) "123"
[1]=> string(3) "456"
}
}
HTML輸入:
<input type="text" class="form-control" placeholder="Line Description" name="line_description[]">
<input type="text" class="form-control" placeholder="Description" name="description">
如果我正確理解了您的問題,則可以嘗試使用下一種方法。 行信息包含在$this->line_description
和$this->line_amount
,因此您需要確保兩個數組的元素計數相等。 您的方法是正確的-准備語句並針對每一行執行此語句。
public function save($data)
{
$this->customer_id = $data['customer_id'];
$this->description = $data['description'];
$this->line_description = $data['line_description'];
$this->line_amount = $data['line_amount'];
$this->validate();
if (empty($this->errors)) {
$db = static::getDB();
$stmt = $db->prepare("INSERT INTO `invoices` (`customer_id`) VALUES (:customer_id)");
$stmt->bindValue(":customer_id", $this->customer_id, PDO::PARAM_INT);
$stmt->execute();
$last_id = $db->lastInsertId();
$db = static::getDB();
$stmt = $db->prepare("INSERT INTO `lines` (`description`, `amount`, `invoice_id`) VALUES (:description, :amount, :invoice_id)");
for ($i = 0; $i < count($this->line_description); $i++)
{
$stmt->bindValue(":description", $this->line_description[$i], PDO::PARAM_STR);
$stmt->bindValue(":amount", $this->line_amount[$i], PDO::PARAM_STR);
$stmt->bindValue(":invoice_id", $last_id, PDO::PARAM_INT);
$stmt->execute();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.