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

xbp102n0  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(64)

我必须使用这些模式创建表:

users(id, name, email) 
user_details (id, user_id, physical_address, otherinfo)

当我尝试在第一个表上使用set relation时,我想使用groxage crud在一个网格中显示两个表的所有内容,如下所示:注意:我已经减少了渲染视图的部分;

$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}');

这是可行的,但问题是这些值出现在网格的一列中。我想知道如何将它们分隔到不同的列中,并使它们在单独的输入字段中可编辑。

af7jpaap

af7jpaap1#

我方式有点可笑,
如果我真的需要分隔字段,我可能会使用callback_column,然后使用活动记录,使用$row->user_id返回值,并回调每个记录
就像:
return $this->some_model->get_name($row->user_id);表示名称字段

return $this->some_model->get_name($row->user_id);表示电子邮件字段
但是,当我用一些虚拟记录进行测试时,它无法排序,(我不知道是否有人可以)

kcugc4gi

kcugc4gi2#

没有直接的方法来显示多个列,但我发现了一个解决这个问题的方法。下面是如何设置名称列如下。

$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];
    }

我百分百肯定这会帮到你

相关问题