2012-04-23 39 views
0

我有兩個表是這樣的:GroceryCrud表關係set_model(連接表)將帖子

CREATE TABLE `tblFacilityHrs` (
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `uid` varchar(45) DEFAULT NULL, 
      `title` varchar(100) DEFAULT NULL, 
      `description` text, 
      PRIMARY KEY (`id`), 
      KEY `key_uid` (`uid`) 
     ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1$$ 

     CREATE TABLE `tblFacilityHrsDateTimes` (
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `owner_uid` varchar(45) DEFAULT NULL, 
      `startDate` date DEFAULT NULL, 
      `endDate` date DEFAULT NULL, 
      `startTime` time DEFAULT NULL, 
      `endTime` time DEFAULT NULL, 
      `days` int(2), 
      `recurrence` int(1) DEFAULT NULL, 
      PRIMARY KEY (`id`), 
      KEY `fk_fh_owneruid` (`owner_uid`), 
      CONSTRAINT `fk_fh_owneruid` FOREIGN KEY (`owner_uid`) REFERENCES `tblFacilityHrs` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE 
     ) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=latin1$$ 

id uid title description location
8ada0ceabd40d509c3fb38f2822a97de11bc6628 Swim Lessons Parent and Child Classes CRC 2 543a6ed0005ff6a0a7fc99cc2f9715d86804ecb0 Swim Lessons Level 1, Session 1 3 7d219b64be6dc706135bdad3e7c2f0d56cb7f353 Swim Lessons Level 2 4 f7c91e2f1daa9c696c22f5aa5736c167d1ba9f94 Swim Lessons Level 3 5 262f06fb75645248162aa983f610ec7959a2011b Swim Lessons Level 4 6 51f9f552ffc5fa4bc8b4e7f914fb22b3b0920c2e Bike 275 Participate in this program and take 4 Fitness Cycling classes and get a FREEWaterbottle! Participants can only register 1 time. This is a FREE program! Sign up in the Multipurpose Room. 7 0cca3515ec8ee990c863e474fee634ae94d382c2 Passport to Fitness Take Norse Fitness Classes, Get your Passport Stamped and win aFree T-shirt! Take 8 Fitness classes between April 10 and May 1 and get a Free T-shirt.

id owner_uid startDate endDate startTime endTime days recurrance
8ada0ceabd40d509c3fb38f2822a97de11bc6628 4/13/2012 4/13/2012 0:00:00 NULL NULL None 2 543a6ed0005ff6a0a7fc99cc2f9715d86804ecb0 NULL NULL 12:30:00 2:00:00 2 3 7d219b64be6dc706135bdad3e7c2f0d56cb7f353 NULL NULL NULL NULL NULL NULL 4 f7c91e2f1daa9c696c22f5aa5736c167d1ba9f94 NULL NULL NULL NULL NULL NULL 5 262f06fb75645248162aa983f610ec7959a2011b NULL NULL NULL NULL NULL NULL 6 51f9f552ffc5fa4bc8b4e7f914fb22b3b0920c2e NULL NULL NULL NULL NULL NULL 7 0cca3515ec8ee990c863e474fee634ae94d382c2 NULL NULL NULL NULL NULL NULL

在我的控制器文件夾中我有下面的代碼main.php文件名爲:

... 
function fitnessSchedule() 
    { 
     $this->config->set_item('url_suffix', ''); 
     $crud = new grocery_CRUD(); 

     $crud->set_model('schedule_model'); 
     $crud->set_table('tblFitnessClasses'); 
     $crud->join_table('tblFitnessClasses','tblFitnessClassDateTimes'); 
     $crud->columns('title','description','location','startDate','endDate','startTime', 'endTime', 'days', 'recurrance'); 
     $crud->display_as('title','Event') 
      ->display_as('description','Description') 
      ->display_as('location','Location') 
      ->display_as('startDate','Start Date') 
      ->display_as('endDate','End Date') 
      ->display_as('startTime','Start Time') 
      ->display_as('endTime','End Time'); 
     $crud->required_fields('title','location'); 
     $crud->set_subject('Event');    

     $output = $crud->render(); 
     $this->_example_output($output);  
    } 

    function _example_output($output = null)  
    { 
     $this->load->view('main_view', $output);  
    } 
... 

在我的模型文件夾中我有這樣的:

<?php 
class schedule_model extends grocery_CRUD_Model 
{ 
     function join_table($table1, $table2) 
     { 
     if($this->$table1 === null) 
      return false; 

     $select = "{$this->$table1}.*"; 
     $select .=",$table2.startDate, $table2.endDate, $table2.startTime, $table2.endTime, $table2.days, $table2.recurrence"; 

     if(!empty($this->relation)) 
      foreach($this->relation as $relation) 
      { 
      list($field_name , $related_table , $related_field_title) = $relation; 
      $unique_join_name = $this->_unique_join_name($field_name); 
      $unique_field_name = $this->_unique_field_name($field_name); 

     if(strstr($related_field_title,'{')) 
       $select .= ", CONCAT('".str_replace(array('{','}'),array("',COALESCE({$unique_join_name}.",", ''),'"),str_replace("'","\\'",$related_field_title))."') as $unique_field_name"; 
      else 
       $select .= ", $unique_join_name.$related_field_title as $unique_field_name"; 

      if($this->field_exists($related_field_title)) 
       $select .= ", {$this->$table1}.$related_field_title as '{$this->$table1}.$related_field_title'"; 
      } 

     $this->db->select($select, false); 


     $this->db->join('uid', '$table2.owner_uid = $table1.uid'); 

     $results = $this->db->get($this->$table1)->result(); 

     return $results; 
     } 

     /* function join_table($table1, $table2) 
     { 
       $this->db->select('$table1.*'); 
       $this->db->join('$table2','$table1.uid = $table2.owner_uid','left'); 
       $this->db->get('$table1'); 
     }*/ 
} 
?> 

我得到這個錯誤:

Fatal error: Call to undefined method grocery_CRUD::join_table() in C:\xampp\htdocs\codeigniter\application\controllers\main.php on line 234

我基本上是試圖通過UID的方式來連接與tblFacilityHrsDateTimes tblFacilityHrs(uid來owner_uid)。我想顯示兩個表一次,這樣,當用戶編輯表,他們不僅編輯活動的名稱/位置,他們還編輯它的時間/日期等

參考:http://www.grocerycrud.com/documentation/options_functions/set_model

回答

2

this forum thread,網絡-johnny說這個功能還不可能。

This is the 1-1 relation that grocery CRUD doesn't have this functionality yet. It depends of how much time I will have in the future to do that and/or if I have any good donations till then.

This functionality is a big deal and also really complicated to do it, but I think it will save lot of time for many users when it will come up.

或許,如果你提供什麼樣的網絡約翰尼認爲是他可能會實現它一個很好的捐贈。

+0

我已編輯我的問題更具體。這可以通過set_model完成。 – 2012-05-02 18:42:25

0

類grocery_CRUD($ CRUD =新grocery_CRUD();) 是localed在文件夾庫和您實現在模型join_table。

3

我有同樣的問題,以下是我所做的解決方案。

  1. 創建與MySQL的加入,我想加入
  2. 查找狀態表的語句視圖($ cur_state = $ crud->的getState();),看看它是不是「列表中, ajaxlist,閱讀或成功「,然後我設置$ crud-> set_table('VIEW_NAME'); ,並設置主鍵$ crud-> set_primary_key('KEY','VIEW_NAME');
  3. 對於其他部分我使用表名本身,以便它有助​​於添加,編輯操作。

該解決方案工作得非常好。

$crud = new grocery_CRUD(); 
$cur_state=$crud->getState(); 
$crud->set_subject('Patient Notes');   

/* Use the mySQL view to display the data with related tables */ 
if(($cur_state=="list") || ($cur_state=="ajaxlist") || ($cur_state=="read") ||  ($cur_state=="success"))  
{ 
    $crud->set_table('patientsnotes_vw'); 
    $crud->columns('noteID','Clinic_No','note','noteCreated','username'); 
    $crud->set_primary_key('noteID','patientsnotes_vw');    

    if($cur_state=="read") 
    { 
    $crud->unset_fields('noteCreatedBy','user_id','patientID');      
     } 
} 
else 
{ 
     /* Use the patient_note table itself for add/edit operation */ 
     $crud->set_table('patient_notes'); 
    $crud->columns('noteID','Clinic_No','note','noteCreated','username'); 
    $crud->required_fields('note'); 
    $crud->field_type('noteCreatedBy', 'hidden', $this->userID); 
    $crud->field_type('patientID', 'hidden', 1); 
    $crud->unset_add_fields('noteCreated'); 
    $crud->unset_edit_fields('noteCreated');   
} 

    $crud->display_as('username','Note Created by'); 
    $crud->display_as('noteCreated','Note Created at');  
    $output = $crud->render();