[英]GroceryCrud Table Relationships set_model (join tables) [EDITED]
I have two tables like this: 我有两个这样的表:
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
id uid标题描述位置
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!8ada0ceabd40d509c3fb38f2822a97de11bc6628游泳课程父母与孩子类CRC 2 543a6ed0005ff6a0a7fc99cc2f9715d86804ecb0游泳课程水平1,会话1 3 7d219b64be6dc706135bdad3e7c2f0d56cb7f353游泳课程2级4 f7c91e2f1daa9c696c22f5aa5736c167d1ba9f94游泳课程3级5 262f06fb75645248162aa983f610ec7959a2011b游泳课程等级4 6 51f9f552ffc5fa4bc8b4e7f914fb22b3b0920c2e自行车275参与该程序,并采取4级健身自行车的类和获得免费的水瓶! Participants can only register 1 time.
参加者只能注册1次。 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!
7 0cca3515ec8ee990c863e474fee634ae94d382c2参加健身的护照参加北欧健身班,获得护照盖章并免费获得一件T恤! Take 8 Fitness classes between April 10 and May 1 and get a Free T-shirt.
在4月10日至5月1日之间参加8次健身课程,并获得免费的T恤。
id owner_uid startDate endDate startTime endTime days recurrance
id owner_uid startDate endDate startTime endTime天重复
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 NULL8ada0ceabd40d509c3fb38f2822a97de11bc6628 2012/4/13 2012/4/13 0点○○分00秒NULL NULL无2 543a6ed0005ff6a0a7fc99cc2f9715d86804ecb0 NULL NULL 12:30:00 2时○○分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 NULL 7 0cca3515ec8ee990c863e474 NULL NULL NULL NULL 7
In my controllers folder I have a file named main.php with the following code: 在我的控制器文件夹中,我有一个名为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);
}
...
In my models folder I have this: 在我的模型文件夹中,有:
<?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');
}*/
}
?>
I'm getting this error: 我收到此错误:
Fatal error: Call to undefined method grocery_CRUD::join_table() in C:\\xampp\\htdocs\\codeigniter\\application\\controllers\\main.php on line 234
致命错误:在第234行的C:\\ xampp \\ htdocs \\ codeigniter \\ application \\ controllers \\ main.php中调用未定义的方法杂货店CRUD :: join_table()
I'm basically trying to concatenate tblFacilityHrs with tblFacilityHrsDateTimes by way of UID (uid to owner_uid). 我基本上是试图通过UID(将uid转换为owner_uid)将tblFacilityHrs与tblFacilityHrsDateTimes连接起来。 I want to display both tables at once so that when a user edits the table not only do they edit the event's name/location they also edit its time/date etc.
我想一次显示两个表,以便当用户编辑表时,他们不仅可以编辑事件的名称/位置,还可以编辑其时间/日期等。
Reference: http://www.grocerycrud.com/documentation/options_functions/set_model 参考: http : //www.grocerycrud.com/documentation/options_functions/set_model
I had the same question and following is the solution that I did. 我有同样的问题,以下是我所做的解决方案。
this solution working very nicely. 这个解决方案效果很好。
$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();
In this forum thread , web-johnny states that this functionality is not yet possible. 在此论坛主题中 ,web-johnny指出此功能尚无法实现。
This is the 1-1 relation that grocery CRUD doesn't have this functionality yet.
这是杂货店CRUD尚不具有此功能的1-1关系。 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.
这项功能非常重要,而且执行起来确实很复杂,但是我认为,当它出现时,它将为许多用户节省大量时间。
Perhaps if you provide what web-johnny deems to be a good donation he might implement it. 也许,如果您提供网络约翰尼认为是好的捐款,他可能会实施。
类别杂货店CRUD($ crud = new grocery_CRUD();)位于文件夹库中,您可以在模型中实现join_table。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.