如何从同一类中的另一个方法检索最后插入的 id?

Posted

技术标签:

【中文标题】如何从同一类中的另一个方法检索最后插入的 id?【英文标题】:How to retrieve the last inserted id from another method inside same class? 【发布时间】:2019-10-24 23:11:22 【问题描述】:

我在Home 类中有两个方法,分别称为addPropertyuploadImages

我从 jquery dropzone 调用 uploadImages() 方法来发布图像,并调用 addProperty() 将表单输入插入数据库。

我想将最后插入的 Id 从 addProperty 方法传递给 uploadImages 以将图像详细信息保存到数据库中。

Home.php(控制器)

<?php if(!defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller

    /**
     * This is default constructor of the class
     */
    public function __construct()
    
      parent::__construct();
      $this->load->model('property_model');

     

    /**
     * Index Page for this controller.
     */
    public function index()
    
        $data = array('title'=> 'Vierra Property Broker', 'main_content'=>'home');
        $this->load->view('template', $data);
    

    /**
     * Loaading the submit property form.
     */
    public function listProperty()
    
      $data = array('title'=> 'Vierra Property Broker - Submit your Property', 'main_content'=>'submit_property');
      $this->load->view('template', $data);
    

    function addProperty()
    
           $this->load->library('form_validation');

           //$this->form_validation->set_rules('prop_title','Villa Title','trim|required|max_length[128]');
          // $this->form_validation->set_rules('prop_status','Status','trim|required');
           //$this->form_validation->set_rules('prop_type','Type','trim|required');
           //$this->form_validation->set_rules('prop_price','Price','trim|required|numeric');
           //$this->form_validation->set_rules('prop_sqft','Sqft','trim|required|numeric');
           $this->form_validation->set_rules('prop_rooms','Rooms','trim|required|numeric');
           $this->form_validation->set_rules('prop_address','Address','trim|required|max_length[200]');
           $this->form_validation->set_rules('prop_owner_phone','Mobile Number','required|min_length[10]');
           $this->form_validation->set_rules('prop_owner_name','Owner Name','required|min_length[5]');
           $this->form_validation->set_rules('prop_owner_email','Owner Email','required|valid_email');
           //$this->form_validation->set_rules('prop_detailed_info','Detailed Info','trim|required|max_length[2000]');
           //$this->form_validation->set_rules('prop_status','Current Status','trim|required');

           if($this->form_validation->run() == FALSE)
           
               $this->listProperty();
           
           else
           
               $prop_title = ucwords(strtolower($this->security->xss_clean($this->input->post('prop_title'))));
               $prop_status = ucwords(strtolower($this->security->xss_clean($this->input->post('prop_status'))));
               $prop_type = ucwords(strtolower($this->security->xss_clean($this->input->post('prop_type'))));
               $prop_price = $this->security->xss_clean($this->input->post('prop_price'));
               $prop_sqft = $this->security->xss_clean($this->input->post('prop_sqft'));
               $prop_rooms = $this->security->xss_clean($this->input->post('prop_rooms'));
               $prop_address = $this->security->xss_clean($this->input->post('prop_address'));
               $prop_owner_name = $this->security->xss_clean($this->input->post('prop_owner_name'));
               $prop_owner_email = $this->security->xss_clean($this->input->post('prop_owner_email'));
               $prop_owner_phone = $this->security->xss_clean($this->input->post('prop_owner_phone'));
               $prop_detailed_info = $this->security->xss_clean($this->input->post('prop_detailed_info'));
               $prop_current_status = $this->security->xss_clean($this->input->post('prop_current_status'));

               //$userInfo = array('email'=>$email, 'password'=>getHashedPassword($password), 'roleId'=>$roleId, 'name'=> $name,
                                   //'mobile'=>$mobile, 'createdBy'=>$this->vendorId, 'createdDtm'=>date('Y-m-d H:i:s'));

                $propertyInfo = array('title'=>$prop_title, 'status'=>$prop_status, 'type'=>$prop_type, 'price'=>$prop_price,
                                      'sqft'=>$prop_sqft, 'rooms'=>$prop_rooms, 'address'=>$prop_address, 'name'=>$prop_owner_name,
                                      'email'=>$prop_owner_email, 'phone'=>$prop_owner_phone, 'detailedInfo'=>$prop_detailed_info,
                                      'currentStatus'=>$prop_current_status);

               $this->load->model('property_model');
               $result = $this->property_model->addNewProperty($propertyInfo);

               if($result > 0)
               
                  //$propertyImgUpload = uploadImages($result);
                   $this->session->set_flashdata('success', 'Thank you for submiting your property with us!, Our team will contact you shortly');
               
               else
               
                   $this->session->set_flashdata('error', 'Submission of property failed, Contact wasim@vpd.ae');
               

               redirect('/submit-property');
           
     

     function uploadImage($propertyid)
     

         if (!empty($_FILES)) 
           $count_img = count($_FILES['file']['name']);

           foreach($_FILES['file']['tmp_name'] as $key => $value) 
               $tempFile = $_FILES['file']['tmp_name'][$key];
               $fileName = $_FILES['file']['name'][$key];
               $targetPath = 'property-images/';
               $targetFile = $targetPath . $fileName ;
               if(move_uploaded_file($tempFile, $targetFile))
               
                   $response = "Success";
               
               else 
                   $response = "Failed";
               
           

        

    


?>

addProperty.js(Jquery 验证和发布 dropzone 图像到 uploadImages() 方法

/**
 * File : addUser.js
 *
 * This file contain the validation of add user form
 *
 * Using validation plugin : jquery.validate.js
 *
 * @author Sarath Chandran
 */
  $(document).ready(function()
    $("#error_msg").hide();

    var addPropertyForm = $("#property-form");
    var validator = addPropertyForm.validate(
        rules:
            //prop_title : required : true ,
            //prop_status :  required : true, selected : true ,
            //prop_type : required : true, selected: true ,
      prop_rooms : required : true, selected: true ,
      prop_address : required : true ,
      prop_owner_name : required : true ,
      //prop_detailed_info : required : true ,
      prop_owner_email : required : true, email : true ,
      prop_owner_phone : required : true, digits : true ,
            //prop_price :  required : true, digits : true ,
      //prop_sqft :  required : true, digits : true 
        ,
        messages:
            //prop_title : required : "Please enter title of villa" ,
            //prop_status :  required : "Please select status", selected : "Please select atlease one option" ,
      //prop_type :  required : "Please select type of villa", selected : "Please select atlease one option" ,
      prop_rooms :  required : "Please select bed rooms", selected : "Please select atlease one option" ,
            prop_address :  required : "Please enter address of villa",
      prop_owner_name :  required : "Please enter name of owner",
      prop_owner_email :  required : "Please enter email of owner", email : "Please enter valid email",
      prop_owner_phone :  required : "Please enter phone of owner", digits : "Please enter valid phone no",
      //prop_price :  required : "Please enter price of villa", digits : "Please enter price in digits",
      //prop_detailed_info :  required : "Please enter detailed information",
      //prop_sqft :  required : "Please enter size of villa", digits : "Please enter size in Sqft"

        ,
)

Dropzone.autoDiscover = false;

    $("div#myDropzone").dropzone(

        url: 'image-upload',
        addRemoveLinks: true,
        paramName: "file",
        maxFiles:11,
        autoProcessQueue: false,
        uploadMultiple: true,
        acceptedFiles: "image/*",
        maxFilesize: 1,
        parallelUploads: 10,

        init: function () 

            var myDropzone = this;

            $("#property-form").submit(function (e) 


              $(window).scrollTop(0);

              //e.preventDefault();

              if ( $("#property-form").valid() ) 
                myDropzone.processQueue();

              

            );

            this.on('sending', function(file, xhr) 
                // Append all form inputs to the formData Dropzone will POST

                  //alert("Data is sending");
            );

            this.on("complete", function (file) 
              if (this.getUploadingFiles().length === 0 && this.getQueuedFiles().length === 0) 

                  //alert("Completed Upload");
                  $("#property-form").submit();
            

          );
        

    );

);

submit_property.php(查看)

<div class="content-area-7 submit-property">
    <div class="container">
        <div class="row">
            <div class="col-md-12">

          <!--      <div id="error_message" class="notification-box"></div> -->
            </div>

            <?php
                $this->load->helper('form');

                $error = $this->session->flashdata('error');
                if($error)
                
                  echo '<div class="notification-box">'.$error.'</div>';

                

                $success = $this->session->flashdata('success');
                if($success)
                
                  echo '<div class="notification-box">'.$success.'</div>';

                

                ?>

                <div id="error_msg" class="alert alert-danger wow fadeInRight delay-01s" role="alert" style="visibility: visible; animation-name: fadeInRight;">
                  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                  <strong>Oops!</strong>, Please fix the following errors and submit again
                </div>

            <div class="col-md-12">
                <div class="submit-address">


                    <form name = "property-form" action="<?php echo base_url() ?>list-property" method="post" id="property-form">
                        <div class="main-title-2">
                            <h1><span>Tell Me</span> Something About Your Property</h1>
                        </div>
                        <div class="search-contents-sidebar mb-30">
                            <div class="form-group">
                                <label>Property Title</label>

                                <input class="input-text" name="prop_title" id="prop_title" placeholder="Property Title">
                                <?php echo form_error('prop_title'); ?>
                            </div>

                            <div class="row">
                                <div class="col-md-6 col-sm-6">
                                    <div class="form-group">
                                        <label>Status</label>
                                        <select class="form-control required" id="prop_status" name="prop_status">
                                          <option value="">Select</option>
                                            <option value="Sale">For Sale</option>
                                            <option value="Rent">For Rent</option>
                                        </select>

                                    </div>

                                </div>
                                <div class="col-md-6 col-sm-6">
                                    <div class="form-group">
                                        <label>Type</label>
                                        <select class="form-control required" id="prop_type" name="prop_type">
                                          <option value="">Select</option>
                                            <option value="Modern">Modern</option>
                                            <option value="Traditional">Traditional</option>
                                            <option value="Arabic">Arabic</option>

                                        </select>


                                    </div>

                                </div>
                            </div>
                            <div class="row">
                                <div class="col-md-3 col-sm-6">
                                    <div class="form-group">
                                        <label>Price (Dirham)</label>
                                        <input class="input-text" name="prop_price" id="prop_price" placeholder="AED">
                                        <?php echo form_error('prop_price'); ?>

                                    </div>
                                </div>
                                <div class="col-md-3 col-sm-6">
                                    <div class="form-group">
                                        <label>Sqft</label>
                                        <input class="input-text" name="prop_sqft" id="prop_sqft" placeholder="SqFt">
                                        <?php echo form_error('prop_sqft'); ?>


                                    </div>
                                </div>
                                <div class="col-md-3 col-sm-6">
                                    <div class="form-group">
                                        <label>Bed Rooms</label>
                                        <select class="form-control required" name="prop_rooms" id="prop_rooms">
                                            <option value="">Select</option>
                                            <option value="3">3</option>
                                            <option value="4">4</option>
                                            <option value="5">5</option>

                                        </select>


                                    </div>
                                </div>
                                <!-- <div class="col-md-3 col-sm-6">
                                    <div class="form-group">
                                        <label>Bathroom</label>
                                        <select class="selectpicker search-fields" name="1">
                                            <option>1</option>
                                            <option>2</option>
                                            <option>3</option>
                                            <option>4</option>
                                            <option>5</option>
                                            <option>6</option>
                                        </select>
                                    </div>
                                </div> -->
                            </div>
                        </div>


                        <div class="main-title-2">
                            <h1><span>Location</span></h1>
                        </div>
                        <div class="row mb-30 ">
                            <div class="col-md-6 col-sm-6">
                                <div class="form-group">
                                    <label>Address</label>
                                    <input class="input-text" id="prop_address" name="prop_address"  placeholder="Address">
                                </div>
                                <?php echo form_error('prop_address'); ?>


                            </div>
                        </div>
                        <div class="main-title-2">
                            <h1><span>Contact</span> Details</h1>
                        </div>
                        <div class="row">
                            <div class="col-md-4 col-sm-4">
                                <div class="form-group">
                                    <label>Name</label>
                                    <input class="input-text" name="prop_owner_name" id="prop_owner_name" placeholder="Name">
                                    <?php echo form_error('prop_owner_name'); ?>

                                </div>
                            </div>
                            <div class="col-md-4 col-sm-4">
                                <div class="form-group">
                                    <label>Email</label>
                                    <input class="input-text" name="prop_owner_email" id="prop_owner_email" placeholder="Email">
                                    <?php echo form_error('prop_owner_email'); ?>

                                </div>
                            </div>

                            <div class="col-md-4 col-sm-4">
                                <div class="form-group">
                                    <label>Contact No</label>
                                    <input class="input-text" name="prop_owner_phone" id="prop_owner_phone" placeholder="Phone">
                                    <?php echo form_error('prop_owner_phone'); ?>

                                </div>
                            </div>

                            </div>

                        <div class="main-title-2">
                        <h1><span>Upload</span> Photos Of Villa </h1>
                        </div>

                        <div id="myDropzone" class="dropzone dropzone-design mb-10">
                          <div class="dz-default dz-message" data=""><span>Drop files here to upload</span></div>
                                                </div>

                        <div class="main-title-2">
                            <h1><span>Detailed</span> Information</h1>
                        </div>

                        <div class="row mb-30">
                            <div class="col-md-12">
                                <div class="form-group">
                                    <textarea class="input-text" id="prop_detailed_info" name="prop_detailed_info" placeholder="Detailed Information"></textarea>
                                </div>
                                <?php echo form_error('prop_detailed_info'); ?>
                            </div>
                        </div>

                          </div>

                            <div class="col-md-12">
                              <input type="submit" class="btn button-sm button-theme" value="Submit" />

                            </div>
                            <script src="<?php echo base_url('assets/frontend/js/addProperty.js'); ?>"></script>

                        </div>

                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

Property_model.php(模型)

<?php if(!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Class : User_model (User Model)
 * User model class to get to handle user related data
 * @author : Kishor Mali
 * @version : 1.1
 * @since : 15 November 2016
 */
class Property_model extends CI_Model

      /**
       * This function is used to get the user listing count
       * @param string $searchText : This is optional search text
       * @return number $count : This is row count
       */
      function propertyListingCount($searchText = '')
      
          $this->db->select('BaseTbl.propertyid, BaseTbl.title, BaseTbl.status, BaseTbl.type, BaseTbl.price, BaseTbl.phone');
          $this->db->from('tbl_properties as BaseTbl');
          if(!empty($searchText)) 
              $likeCriteria = "(BaseTbl.email  LIKE '%".$searchText."%'
                              OR  BaseTbl.name  LIKE '%".$searchText."%'
                              OR  BaseTbl.phone  LIKE '%".$searchText."%')";
              $this->db->where($likeCriteria);
          
          $this->db->where('BaseTbl.currentStatus', 0);
          $query = $this->db->get();

          return $query->num_rows();
      

      /**
       * This function is used to get the user listing count
       * @param string $searchText : This is optional search text
       * @param number $page : This is pagination offset
       * @param number $segment : This is pagination limit
       * @return array $result : This is result
       */
      function propertyListing($searchText = '', $page, $segment)
      
          $this->db->select('BaseTbl.propertyid, BaseTbl.title, BaseTbl.status, BaseTbl.type, BaseTbl.price, BaseTbl.phone');
          $this->db->from('tbl_properties as BaseTbl');
          if(!empty($searchText)) 
              $likeCriteria = "(BaseTbl.email  LIKE '%".$searchText."%'
                              OR  BaseTbl.name  LIKE '%".$searchText."%'
                              OR  BaseTbl.phone  LIKE '%".$searchText."%')";
              $this->db->where($likeCriteria);
          
          $this->db->where('BaseTbl.currentStatus', 0);
          $this->db->order_by('BaseTbl.propertyid', 'DESC');
          $this->db->limit($page, $segment);
          $query = $this->db->get();

          $result = $query->result();
          return $result;
      

      /**
       * This function is used to add new property to system
       * @return number $insert_id : This is last inserted id
       */
      function addNewProperty($propertyInfo)
      
          $this->db->trans_start();
          $this->db->insert('tbl_properties', $propertyInfo);

          $insert_id = $this->db->insert_id();

          $this->db->trans_complete();

          return $insert_id;
      

      function addPropertyImgs($propertyImgs)
      
          $this->db->trans_start();
          $this->db->insert('tbl_property_images', $propertyImgs);

          $insert_id = $this->db->insert_id();

          $this->db->trans_complete();

          return $insert_id;
      


?>

我想将图像详细信息插入到名为 tbl_property_images 的表中

    文件上传工作 表单输入也成功插入

问题:

我需要使用propertyid 将图像详细信息插入到表中,propertyid 是我们从addProperty 方法中的$result 变量中获得的最后插入的id。

【问题讨论】:

出于好奇。需要exit('No direct script access allowed');的部分吗? 不需要那个?? 我不知道。这就是我问的原因 我不太了解你的代码,但是如果你需要在 add 属性中保存一个 Id,只需将其设置为“home”类的属性,这样你就可以使用它了来自同一类中的 uploadimage 方法。 尝试改进格式,以便于阅读。 【参考方案1】:

解决方案 1 创建一个插入记录并返回插入记录的 id 的过程。

解决方案 2 创建一个将所有数据插入各个表并返回成功或失败的过程。

【讨论】:

以上是关于如何从同一类中的另一个方法检索最后插入的 id?的主要内容,如果未能解决你的问题,请参考以下文章

从同一个类中的另一个方法调用 main 方法

如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]

在 C++ 中从同一类中的另一个方法调用方法

如何从同一项目中的另一个类访问主类中的变量? [复制]

如何获取最后插入的自动递增 id 并将其插入 laravel 中的另一个表中?

如何从 DataTable 中的最后一行检索值?