2017-02-10 62 views
1

这是我的模型,我有问题,当我去创建“pjesma”,我选择“izvodjac”的形式,以及如何实现这与codeigniter3,我不得不插入值到“izvodi_pjesmu”从哪里获得“pjesma_id”那我只是插入,我希望它的清楚,如果你看到的EER下图你就会明白我的希望。谢谢。CodeIgniter插入到两个表

diagram

控制器的方法:

public function kreiraj() 
{ 
    if (isset($_POST['kreiraj'])) 
    { 
     $data1 = array(
      'naslov' => $this->input->post('naslov'), 
      'tablatura' => $this->input->post('tablatura'), 
      'korisnik_korisnik_id' => $_SESSION['korisnik_id'] 
     ); 

     $data2 = array(
      'izvodjac_izvodjac_id' => $this->input->post('izvodjaci') 
     ); 

     $this->form_validation->set_rules('izvodjaci','Izvođači','required|callback_check_default'); 
     $this->form_validation->set_message('check_default', 'Morate odabrati izvođača'); 
     $this->form_validation->set_rules('naslov', 'Naslov', 'required', array('required' => 'Naslov je obavezan')); 
     $this->form_validation->set_rules('tablatura', 'Tablatura', 'required', array('required' => 'Tablatura je obavezna')); 


     if ($this->form_validation->run() != FALSE) 
     { 
      $this->pjesma_model->kreiraj($data1, $data2); 

      redirect('pjesma', 'location'); 
     } 

    } 

    $data['izvodjaci'] = $this->izvodjac_model->svi_izvodjaci(); 

    $this->load->view('zaglavlje'); 
    $this->load->view('pjesma_kreiraj', $data); 
    $this->load->view('podnozje'); 
} 

模型方法:

public function kreiraj($data1, $data2) 
{ 
    $this->db->insert('izvodi_pjesmu', $data2); 
    $this->db->insert('pjesma', $data1); 

} 

视图:

<h1>Kreiranje pjesme</h1> 
<hr> 
<div class="row"> 
    <div class="col"></div> 
    <div class="col-9"> 
    <?php if (validation_errors()): ?> 
     <div class="alert alert-info"> 
      <?php echo validation_errors(); ?> 
     </div> 
    <?php endif; ?> 
    <?php echo form_open('pjesma/kreiraj'); ?> 
     <div class="form-group"> 
      <label for="izvodjaci">Izvođač:</label> 
      <select class="form-control" name="izvodjaci" id="izvodjaci"> 
       <option value="0">odabir izvođača</option> 
       <?php foreach($izvodjaci as $izvodjac): ?> 
        <option value="<?php echo $izvodjac->izvodjac_id; ?>"><?php echo $izvodjac->naziv; ?></option> 
       <?php endforeach; ?> 
      </select> 
     </div> 
     <div class="form-group"> 
      <label for="naslov">Naslov:</label> 
      <input type="text" class="form-control" id="naslov" name="naslov" value="<?php echo set_value('naslov'); ?>" /> 
     </div> 
     <div class="form-group"> 
      <label for="tablatura">Tablatura:</label> 
      <textarea class="form-control" id="tablatura" name="tablatura"></textarea> 
     </div> 
     <button type="submit" class="btn btn-default" name="kreiraj">Kreiraj pjesmu</button> 
    <?php echo form_close(); ?> 
</div> 
<div class="col"></div> 

+0

你有izvode_pejesmu模式?您需要为表中的最后pjesma_id izvodi_pjesmu –

+0

没有我没有模型izvode_pjesmu。谢谢 –

回答

0

试试这个:

控制器:

public function kreiraj() 
    { 
     if (isset($_POST['kreiraj'])) 
     { 
      $data1 = array(
       'naslov' => $this->input->post('naslov'), 
       'tablatura' => $this->input->post('tablatura'), 
       'korisnik_korisnik_id' => $_SESSION['korisnik_id'] 
      ); 

      $this->form_validation->set_rules('izvodjaci','Izvođači','required|callback_check_default'); 
      $this->form_validation->set_message('check_default', 'Morate odabrati izvođača'); 
      $this->form_validation->set_rules('naslov', 'Naslov', 'required', array('required' => 'Naslov je obavezan')); 
      $this->form_validation->set_rules('tablatura', 'Tablatura', 'required', array('required' => 'Tablatura je obavezna')); 


      if ($this->form_validation->run() != FALSE) 
      { 
       $id= $this->pjesma_model->kreiraj($data1); 
       $data2 = array(
       'izvodjac_izvodjac_id' => $this->input->post('izvodjaci'), 
       'pjesma_pjesma_id' => $id 
      ); 
       $this->pjesma_model->pjesma_pjesmu($data2); 
       redirect('pjesma', 'location'); 
      } 

     } 

      $data['izvodjaci'] = $this->izvodjac_model->svi_izvodjaci(); 

      $this->load->view('zaglavlje'); 
      $this->load->view('pjesma_kreiraj', $data); 
      $this->load->view('podnozje'); 
     } 

型号:

public function kreiraj($data1) 
    { 

     $this->db->insert('pjesma', $data1); 
     return $this->db->insert_id(); 

    } 
public function pjesma_pjesmu($data) 
{ 

    $this->db->insert('izvodi_pjesmu', $data); 
    return $this->db->insert_id(); 

} 
+1

分离谢谢你,它的工作是肯定的,而且在我看来,它分离代码模型和控制器我MVC的风格,如果我理解 –

+0

没错,这是使用mvc的正确方法。 –

0

你可以用$这个 - > DB-> INSERT_ID();

将返回最后插入的ID。在pjesma表中插入数据后添加这一行,它将返回'pjesma_id'。然后你可以使用它。

这样的 -

公共职能kreiraj($数据1,$数据2) {

$this->db->insert('pjesma', $data1); 

// ge tlast inserted id 
$pjesma_id = $this->db->insert_id(); 
$izvodjac_izvodjac_id = $data2['izvodjac_izvodjac_id']; 

$data = array('pjesma_id' => $pjesma_id, 
     'izvodjac_izvodjac_id' => $izvodjac_izvodjac_id); 

$this->db->insert('izvodi_pjesmu', $data); 

}

+0

谢谢你,我用这个变化不大和作品,在数据阵列我把不pjesma_id但pjesma_pjesma_id。这是简单的解决方案,所以我喜欢它 –

+0

我很高兴它帮助你。 –

0

你可以这样做这样的事,可能这会帮助你,

$insert = array( 
     'naslov' => $this->input->post('naslov'), 
     'tablatura' => $this->input->post('tablatura'), 
     'korisnik_korisnik_id' => $_SESSION['korisnik_id'] 
     ); 
    $this->db->insert('tabl1', $insert); 
    $output["insert_id"] = $this->db->insert_id(); 
    if (isset($output["insert_id"])) { 
    $insert = array(
       'field1' => $value1, 
       'field2' => $value2, 
     ); 
    $this->db->insert('tabl2', $insert); 
    } 
+0

谢谢你,这可能会工作,但我觉得代码没有在MVC风格 –