[英]insert multiple records at once for single foreign key
根據上面的圖片,選擇項目有一個下拉菜單。選擇項目后,用戶將可以添加其他詳細信息。 現在我想在表單提交project_id(下拉菜單中具有項目名稱的id映射)時插入其他行。
但在我的情況下,project_id僅插入第一行。 當我打印數組時出現以下結果。
數組([0] =>數組([project_id] => 1 [staff_id] => 2 [item_no] => 1 [描述] => 1 [數量] => 1 [單位] =>立方體[速率] => 1 [人工時間] => 1 [人工成本] => 1 [數量] => 2) 1 =>數組([project_id] => [staff_id] => 2 [item_no] => 2 [描述] => 2 [數量] => 2 [單位] =>平方英尺[費率] => 2 [勞力小時] => 2 [勞務成本] => 2 [金額] => 8)[2] =>數組([project_id] => [ staff_id] => 2 [item_no] => 3 [description] => 3 [qty] => 3 [unit] =>立方體[rate] => 3 [laboure_hrs] => 3 [laboure_cost] => 3 [amount] => 18))
我如何將project_id傳遞給另一個字段。 我的代碼如下
控制者
public function create(){
// validate fields
$this->form_validation->set_rules('work_product_id', 'Work Product Id', 'required');
$this->form_validation->set_rules('work_item_description', 'Work Item Description', 'required');
$this->form_validation->set_rules('quantity', 'Quantity', 'required');
$this->form_validation->set_rules('rate', 'Rate', 'required|numeric');
$this->form_validation->set_rules('laboure_hrs', 'Laboure Hrs', 'required|numeric');
$this->form_validation->set_rules('laboure_cost', 'Laboure Cost', 'required|numeric');
if ($_POST)
{
$project_id=$this->input->post('project');
$staff_id=$this->input->post('staff_id');
$item_no=$this->input->post('work_product_id');
$description=$this->input->post('work_item_description');
$qty=$this->input->post('quantity');
$unit=$this->input->post('unit');
$rate=$this->input->post('rate');
$laboure_hrs=$this->input->post('laboure_hrs');
$laboure_cost=$this->input->post('laboure_cost');
$amount=$this->input->post('txtmultTotal');
$data= [];
for ($i = 0; $i < count($this->input->post('work_product_id')); $i++)
{
$data[$i] = array(
'project_id' => $project_id
'staff_id' => $staff_id[$i],
'item_no' => $item_no[$i],
'description' => $description[$i],
'qty' => $qty[$i],
'unit' => $unit[$i],
'rate' => $rate[$i],
'laboure_hrs' => $laboure_hrs[$i],
'laboure_cost' => $laboure_cost[$i],
'amount' => $amount[$i],
);
}
print_r($data);
$this->boq_model->create($data);
}
}
模型
function create($data){
$this->db->insert_batch('boq',$data);
}
我想你想插入一行到你的project
表,然后插入幾行到您的item
使用的值表project_id
列作為外鍵。
(相對而言,您的問題很難理解;如果您從英語水平較高的人那里得到編輯幫助,則可能會比我的問題得到更好的回答。)
這就是你要做的。
首先,在project
表中插入一行。 不要在INSERT查詢中提及project_id
列,因此MySQL將分配一個自動遞增的主鍵。
INSERT INTO project (name, whatever) VALUES (?, ?);
然后, 使用LAST_INSERT_ID()
檢索自動增量ID的值,如下所示。
SET @project_id := LAST_INSERT_ID();
然后,使用該值將行插入到item
表中。
INSERT INTO item (project_id, description, qty, whatever)
VALUES (@project_id, ?, ?, ?)
訣竅是在插入主表后立即檢索LAST_INSERT_ID()
的值,並將其存儲在MySQL用戶定義的變量 @project_id
。 然后,將其用於詳細信息表中的每次插入。
從您的html,project_id不是控件數組。 因此,您應該做的是在循環之前檢索project_id並在循環中使用它,或者在循環中刪除project_id前面的[$ i]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.