我有一个表单,我正在使用代码签名人,现在我想做更新/插入。因为我现在所能做的只是更新。示例:
如果我的 project_id 51 存在它将更新,但是如果不存在,则它将将插入。
以下是数据库布局
tbldevdetails
dev_id | project_id | dev_devloper | dev_purchase_date | dev_handover_date |dev_oqood_status | dev_contract | dev_email | dev_landline | dev_mobile
查看
<!-- DEVELOPER DETAILS MODAL-->
<div class="modal fade" id="add-edit-dev" tabindex="-1" role="dialog">
<div class="modal-dialog">
<?php echo form_open(admin_url('projects/add_edit_devdetails/'.$project->id)); ?>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title"><?php echo _l('dev_title'); ?></h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-6" id="tc_cperiod_to">
<?php $value = (isset($project) ? _d($project->dev_purchase_date) : _d(date('Y-m-d'))); ?>
<?php echo render_date_input('dev_purchase_date','dev_purchase_date',$value); ?>
</div>
<div class="col-md-6" id="dev_handover_date">
<?php $value = (isset($project) ? _d($project->dev_handover_date) : _d(date('Y-m-d'))); ?>
<?php echo render_date_input('dev_handover_date','dev_handover_date',$value); ?>
</div>
</div>
<div class="row">
<div class="col-md-6">
<?php echo render_input('dev_oqood_status','dev_oqood_status',isset($project) ? $project->dev_oqood_status : '','text'); ?>
</div>
<div class="col-md-6">
<?php echo render_input('dev_contact','dev_contact',isset($project) ? $project->dev_contact : '','text'); ?>
</div>
</div>
<div class="row">
<div class="col-md-4">
<?php echo render_input('dev_email','dev_email',isset($project) ? $project->dev_email : '','text'); ?>
</div>
<div class="col-md-4">
<?php echo render_input('dev_landline','dev_landline',isset($project) ? $project->dev_landline : '','text'); ?>
</div>
<div class="col-md-4">
<?php echo render_input('dev_mobile','dev_mobile',isset($project) ? $project->dev_mobile : '','text'); ?>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal"><?php echo _l('close'); ?></button>
<button type="submit" class="btn btn-info" autocomplete="off" data-loading-text="<?php echo _l('wait_text'); ?>"><?php echo _l('submit'); ?></button>
</div>
</div>
<!-- /.modal-content -->
<?php echo form_close(); ?>
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
控制器
public function add_edit_devdetails($project_id)
{
if (has_permission('projects', '', 'edit') || has_permission('projects', '', 'create')) {
$this->developer_model->update($this->input->post(), $project_id);
redirect($_SERVER['HTTP_REFERER']);
}
}
模型
public function update($data, $id)
{
$_data['data'] = $data;
$_data['project_id'] = $id;
$_data = do_action('before_update_project', $_data);
$data = $_data['data'];
$this->db->where('project_id',$id);
$pid = $this->db->get('tbldevdetails');
if($pid->num_rows() < 0)
{
$this->db->insert('tbldevdetails', $data);
} else {
$this->db->where('project_id', $id);
$this->db->update('tbldevdetails', $data);
}
}
}
我的更新正在使用此代码,但我的插入不起作用。
谢谢
请关注可以从单个查询中插入更新的链接。如果已经存在行,然后自动更新该行,该行是MySQL Server中的处理。
首先,请确保在视图中适当设置对add_edit_devdetails()
的参数。在这种方法中,如果控制器未传递(未设置(,我们不会将$project->id
添加到操作URL中。
<?php
$action = 'projects/add_edit_devdetails';
//append the id if provided
if(isset($project->id))
{
$action .= "/{$project->id}";
}
echo form_open($action);
?>
在表单的操作方法中,我们使用默认参数,以便未提供参数值时,使用默认值。
public function add_edit_devdetails($project_id = NULL)
{
if(has_permission('projects', '', 'edit') || has_permission('projects', '', 'create'))
{
$this->developer_model->update($this->input->post(), $project_id);
redirect($_SERVER['HTTP_REFERER']);
}
}
在模型中,我们只需检查是否设置了$id
。如果是这样,请更新其他插入。
public function update($data, $id)
{
if(isset($id)) //FALSE if $id===NULL
{
$this->db->update('tbldevdetails', $data, array('id' => $id));
}
else
{
$this->db->insert('tbldevdetails', $data);
}
}
我忽略了do_action('before_update_project', $_data);
的调用,因为它似乎与进行数据库调用有关以确定数据库中$id
的值是否已经存在。我假设值是一个自动增量字段,而打开视图的控制器知道这是否是退出记录。