Hi all,
I would like to connect two tables by n:n relation - for example "students" should be able to select "courses".
On that form the students shouldn't be able to change their own name or class.
My first approach to this was:
public function choose()
{
$crud = new grocery_CRUD();
$crud->set_subject('Choices');
$crud->set_table('students');
$crud->set_relation_n_n('SelectedCourses','selected','courses','st_ID','co_ID','CourseName');
$crud->columns('Name','First Name','Class','SelectedCourses');
$crud->fields('Name','First Name','Class','SelectedCourses');
$crud->field_type('Name','readonly');
$crud->field_type('First Name','readonly');
$crud->field_type('Class','readonly');
$crud->callback_column('SelectedCourses', array($this, '_line_break'));
$crud->unset_add();
$crud->unset_read();
$crud->unset_delete();
$output = $crud->render();
$this->_example_output($output);
}
function _line_break($value, $row)
{
return $value = str_replace(',',',<br>',$row->SelectedCourses);
}
Everything looks fine, but I get an error when trying to save the record.
The error only occurs when all fields are set to "read_only" - possibly because there is nothing to save in the "students" table if everything is read_only.
But on the other hand that is exactly what I want - there souldn't be made any changes to the "students" table, only to the relation table (called "selected" in my example).
As a workaround, I had to add an extra field to the "students" table and make it hidden (I called it "Dummy") - see lines 8 and 12.
public function choose()
{
$crud = new grocery_CRUD();
$crud->set_subject('Choices');
$crud->set_table('students');
$crud->set_relation_n_n('SelectedCourses','selected','courses','st_ID','co_ID','CourseName');
$crud->columns('Name','First Name','Class','SelectedCourses');
$crud->fields('Name','First Name','Class','SelectedCourses','Dummy');
$crud->field_type('Name','readonly');
$crud->field_type('First Name','readonly');
$crud->field_type('Class','readonly');
$crud->field_type('Dummy','hidden');
$crud->callback_column('SelectedCourses', array($this, '_line_break'));
$crud->unset_add();
$crud->unset_read();
$crud->unset_delete();
$output = $crud->render();
$this->_example_output($output);
}
function _line_break($value, $row)
{
return $value = str_replace(',',',<br>',$row->SelectedCourses);
}
So is this a bug or did I have the wrong approach?
Thanks in advance :)
David
PS:
Oh by the way there is another issue I stumbled over ...
In application/config/grocery_crud.php I set the uk-date format
$config['grocery_crud_date_format'] = 'uk-date';
The date format shows fine in the table itself, but not when I use it as a choice in set_relation_n_n: (there it's shown in yyyy-mm-dd instead)
$crud->set_relation_n_n('SelectedCourses','selected','courses','st_ID','co_ID','{CourseName} - {CourseTime}');
