【问题标题】:How to make insert if id not exist and update if exist?如果id不存在如何插入,如果存在则更新?
【发布时间】:2018-02-27 07:13:40
【问题描述】:

我有一个表格,我正在使用一个 codeigniter,现在我想做更新/插入。 因为我现在能做的只有更新。 示例:

如果我的 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">&times;</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);
        }
    }
}

我的更新正在处理此代码,但我的插入不起作用。

谢谢

【问题讨论】:

  • 试试这个语句 - if($pid->num_rows() == 0) 代替 if($pid->num_rows()
  • 可能已经在这里回答了。stackoverflow.com/questions/29318749/…
  • @Sumit 它有效!但反之亦然。我的更新不起作用
  • @gautamaggarwal 是的,我用它作为指导,但我有不同的问题
  • 试试这个语句 print_r($pid);死();在模型页面中 $pid = $this->db->get('tbldevdetails');显示你的输出。我认为你没有从数据库中收到任何数据。所以你总是得到 0 行。

标签: mysql sql codeigniter sql-update sql-insert


【解决方案1】:

【讨论】:

    【解决方案2】:

    首先,确保add_edit_devdetails() 的参数在视图中正确设置。在这种方法中,如果控制器没有传递(未设置)$project-&gt;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 是否已设置。如果是,则更新 else insert。

    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 的值是否已经存在于数据库中有关。我假设 value 是一个自动增量字段,并且打开视图的控制器 知道这是否是一个退出记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 2015-03-31
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2019-10-17
      • 2012-12-13
      相关资源
      最近更新 更多