CodeIgniter db->通过循环插入
CodeIgniter db->insert through loop
我是 CI 的新手。我想用循环将一些记录添加到数据库中。我的控制器中有:
$client_name = $this->input->post('client_name');
$contact_person_details = array($this->input->post('contact_person_name_1'),
$this->input->post('contact_person_phone_1'),
$this->input->post('contact_person_email_1'),
$this->input->post('contact_person_name_2'),
$this->input->post('contact_person_phone_2'),
$this->input->post('contact_person_email_2'),
$this->input->post('contact_person_name_3'),
$this->input->post('contact_person_phone_3'),
$this->input->post('contact_person_email_3'),
);
$this->common_model->dbinsert_contactpersons('ci_contact_persons', $contact_person_details, $client_name);
然后在我的模型中:
function dbinsert_contactpersons ($tablename, $details, $client_name) {
for ($i=0; $i<=3; $i++) {
$w = 3*$i;
$j = $w+1;
$k = $w+2;
$insert_detail = array('client' => $client_name,
'contact_person_name' => $details[$w],
'contact_person_phone' => $details[$j],
'contact_person_email' => $details[$k]
);
if($this->db->insert ($tablename, $insert_detail))
{
return true;
}
else
{
return false;
}
}
}
代码将第一个联系人的详细信息插入数据库(contact_person_name_1、contact_person_phone_1、contact_person_email_1)但不会插入其余部分...当我var_dump 数组$contact_person_details,值在那里。
感谢您的建议...
开始编辑 >
我试图优化控制器并在存在像这样的空值时摆脱数组:
$contacts_data = array();
for ($i=1; $i<=3; $i++) {
if ($this->input->post('contact_person_name_'.$i) != "") {
$contacts_data['client'] = $this->input->post('client_name');
$contacts_data['contact_person_name'] = $this->input->post('contact_person_name_'.$i);
$contacts_data['contact_person_phone'] = $this->input->post('contact_person_phone_'.$i);
$contacts_data['contact_person_email'] = $this->input->post('contact_person_email_'.$i);
}
}
很明显,有错误...有正确的方法吗?
您可以将一个数组发送到模型并在一行中进行多次插入:
控制器:
$data = array(
array(
'client' => $this->input->post('client_name') ,
'contact_person_name' => $this->input->post('contact_person_name_1') ,
'contact_person_phone' => $this->input->post('contact_person_phone_1'),
'contact_person_email' => $this->input->post('contact_person_email_1'),
),
array(
'client' => $this->input->post('client_name') ,
'contact_person_name' => $this->input->post('contact_person_name_2') ,
'contact_person_phone' => $this->input->post('contact_person_phone_2'),
'contact_person_email' => $this->input->post('contact_person_email_2'),
)
);
$this->common_model->dbinsert_contactpersons('ci_contact_persons', $data);
型号:
function dbinsert_contactpersons ($tablename, $data)
{
$this->db->insert_batch($tablename, $data);
}
您或许可以使用循环和数组优化控制器部分(例如 contact_person_name[])。
更多详情:http://www.codeigniter.com/user_guide/database/active_record.html#insert
我是 CI 的新手。我想用循环将一些记录添加到数据库中。我的控制器中有:
$client_name = $this->input->post('client_name');
$contact_person_details = array($this->input->post('contact_person_name_1'),
$this->input->post('contact_person_phone_1'),
$this->input->post('contact_person_email_1'),
$this->input->post('contact_person_name_2'),
$this->input->post('contact_person_phone_2'),
$this->input->post('contact_person_email_2'),
$this->input->post('contact_person_name_3'),
$this->input->post('contact_person_phone_3'),
$this->input->post('contact_person_email_3'),
);
$this->common_model->dbinsert_contactpersons('ci_contact_persons', $contact_person_details, $client_name);
然后在我的模型中:
function dbinsert_contactpersons ($tablename, $details, $client_name) {
for ($i=0; $i<=3; $i++) {
$w = 3*$i;
$j = $w+1;
$k = $w+2;
$insert_detail = array('client' => $client_name,
'contact_person_name' => $details[$w],
'contact_person_phone' => $details[$j],
'contact_person_email' => $details[$k]
);
if($this->db->insert ($tablename, $insert_detail))
{
return true;
}
else
{
return false;
}
}
}
代码将第一个联系人的详细信息插入数据库(contact_person_name_1、contact_person_phone_1、contact_person_email_1)但不会插入其余部分...当我var_dump 数组$contact_person_details,值在那里。 感谢您的建议...
开始编辑 > 我试图优化控制器并在存在像这样的空值时摆脱数组:
$contacts_data = array();
for ($i=1; $i<=3; $i++) {
if ($this->input->post('contact_person_name_'.$i) != "") {
$contacts_data['client'] = $this->input->post('client_name');
$contacts_data['contact_person_name'] = $this->input->post('contact_person_name_'.$i);
$contacts_data['contact_person_phone'] = $this->input->post('contact_person_phone_'.$i);
$contacts_data['contact_person_email'] = $this->input->post('contact_person_email_'.$i);
}
}
很明显,有错误...有正确的方法吗?
您可以将一个数组发送到模型并在一行中进行多次插入:
控制器:
$data = array(
array(
'client' => $this->input->post('client_name') ,
'contact_person_name' => $this->input->post('contact_person_name_1') ,
'contact_person_phone' => $this->input->post('contact_person_phone_1'),
'contact_person_email' => $this->input->post('contact_person_email_1'),
),
array(
'client' => $this->input->post('client_name') ,
'contact_person_name' => $this->input->post('contact_person_name_2') ,
'contact_person_phone' => $this->input->post('contact_person_phone_2'),
'contact_person_email' => $this->input->post('contact_person_email_2'),
)
);
$this->common_model->dbinsert_contactpersons('ci_contact_persons', $data);
型号:
function dbinsert_contactpersons ($tablename, $data)
{
$this->db->insert_batch($tablename, $data);
}
您或许可以使用循环和数组优化控制器部分(例如 contact_person_name[])。
更多详情:http://www.codeigniter.com/user_guide/database/active_record.html#insert