[英]How to use grocery set_relation function to display content from two different tables in different columns
我必须使用这些架构的表:
users(id, name, email)
user_details (id, user_id, physical_address, otherinfo)
当我尝试在第一个表上使用 set 关系时,我想在一个网格中显示两个表的所有内容,如图所示: 注意:我已经减少了渲染视图的部分;
$crud = new grocery_CRUD();
$crud->set_table('users');
$crud->set_relation('id', 'user_details', '{physical_address} + {otherinfo}');
id 字段的值以及引用的表没有出现在网格中,因此在使用主键时它似乎不起作用。
所以我决定从第二个表的内容开始,如下所示:
$crud = new grocery_CRUD();
$crud->set_table('user_details');
$crud->set_relation('user_id', 'users', '{name} + {email}');
这可行,但问题是这些值出现在网格的一列中。 我想知道如何将它们分成不同的列,并使它们在单独的输入字段中可编辑。
我的方式有点可笑,
如果我真的需要分隔字段,我可能会使用callback_column然后使用活动记录使用$row->user_id
返回值,并回调每个记录
就像:
return $this->some_model->get_name($row->user_id);
对于名称字段
和return $this->some_model->get_name($row->user_id);
对于电子邮件字段
但是,当我用一些虚拟记录测试时,它无法排序,(我不知道是否有人可以)
没有直接的方法来显示多列,但我找到了解决这个问题的方法。 这里是如何设置名称列如下。
$crud->columns('name','email'); // define all required columns
$crud->callback_column(unique_field_name('user_id'),array($this,'callback_set_user_name'));
function unique_field_name($field_name)
{
return 's'.substr(md5($field_name),0,8);
}
public function callback_set_user_name($value, $row)
{
$row->full_name = $row->s447d3092; // before getting to know s447d3092 key return json_encode($row); you will key pair with {name} + {email} ex: {"s447d3092":"shiva + shiv@gmail.com"}
return explode("+",$value)[0]; // here you will have only name
}
$crud->callback_column('email',array($this,'callback_set_email'));
public function callback_set_email($value, $row)
{
return explode("+",$row->full_name)[1];
}
我 100% 确定这会对您有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.