繁体   English   中英

如何使用杂货店 set_relation 函数在不同列中显示来自两个不同表的内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM