如何使用代码点火器活动记录查询返回一维数组中的表字段

Posted

技术标签:

【中文标题】如何使用代码点火器活动记录查询返回一维数组中的表字段【英文标题】:How to return a table field in single dimensional array with code-igniter active record query 【发布时间】:2015-08-18 14:22:02 【问题描述】:

我正在从 user_roles 表中获取已登录用户的用户角色 ID。一个用户可以有多个角色,我在多维数组中得到结果。我正在使用 foreach 循环返回单个数组中的 role_ids 以在其他查​​询 IN 子句中使用。代码点火器中有没有办法检索一维数组中的角色 ID。这是我到目前为止所做的:

获取角色的 Modal 类函数

$select_fields = 'ur.role_id AS role_id';

$this->db->select($select_fields, FALSE); 

$this->db->from('users_roles AS ur');   
$this->db->where('ur.user_id', $user_id);  
$query = $this->db->get(); 
if($query->num_rows())

    return $query->result_array(); 

return FALSE; 

我得到的返回数组:

Array
(
    [0] => Array
        (
            [role_id] => 1
        )

    [1] => Array
        (
            [role_id] => 2
        )

)

我需要将上述返回数组传递给其他 SQL IN 语句,因为我必须手动将数组更改为:

$select_fields = 'ur.role_id AS role_id';

$this->db->select($select_fields, FALSE); 

$this->db->from('users_roles AS ur');   
$this->db->where('ur.user_id', $user_id);  
$query = $this->db->get(); 
if($query->num_rows())

    $result = $query->result_array(); 
    $user_role_ids = array();
    foreach ($result as $key => $value) 
        $user_role_ids[]    = $value['role_id'];
    
    return $user_role_ids;

return FALSE;

我得到的返回数组:

Array
(
    [0] => 1
    [1] => 2
)

【问题讨论】:

【参考方案1】:

如果你安装了最新的php,你可以使用array_column函数

喜欢这个

function somename()

  ...
  ...
  return array_column($query->result_array(),'role_id');  

function somename()

  ...
  ...
  return array_map(function($_)return $_['role_id'];, $query->result_array());

最终你可以在你的控制器上调用

$this->db->where_in('some_fieldname', $this->somename() );

【讨论】:

【参考方案2】:

只要把它当作

$select_fields = 'group_concat(ur.role_id) AS role_id';

$this->db->select($select_fields, FALSE); 

$this->db->from('users_roles AS ur');   
$this->db->where('ur.user_id', $user_id);  
$query = $this->db->get(); 
if($query->num_rows())

    return $query->result_array(); 

return FALSE;

这会给你一个数组

Array
(
    [0] => Array
        (
            [root] => 1,2,3,4
        )

)

这样您就可以轻松地在IN 语句中传递该值

【讨论】:

以上是关于如何使用代码点火器活动记录查询返回一维数组中的表字段的主要内容,如果未能解决你的问题,请参考以下文章

协同点火器;活动记录类

ci框架在查询数据库,如何返回一个一维数组,我查的是多条数据的一个字段

如何查询活动记录?

插入批处理,如果在Codeigniter 3 HMVC中有重复的密钥更新

查询数组内值的活动记录

代码点火器 |获取上一个 URL 并用作返回上一页的按钮