CodeIgniter 与 Active Records 和 or_like

问题描述 投票:0回答:1

我有一个管理面板,可以查看从名为“users”的数据库表中获取的所有用户信息。

有一个搜索框,我使用活动记录来获取数据。但这似乎有一个问题,我无法弄清楚。我很确定它在

or_like
部分,但这个错误让我很困惑。

这是我传递一个变量的查询

$data
从搜索框中发布信息:

public function get($data) {

    $this->db->select('id, email, firstname, lastname, usertype, ts_created, ts_last_login, position');

    if (isset($data['query']) && $data['query'] != '') {
        $fields = json_decode($data['fields'], true);

        $this->db->like($fields[0], $data['query']);

        foreach ($fields as $field) {
            $this->db->or_like($field, $data['query']);
        }

    }

    $this->db->limit($data['limit'], $data['start']);
    if (isset($data['sort'])) {
        $sort = json_decode($data['sort'], true);
        $this->db->order_by($sort[0]['property'], $sort[0]['direction']);
    }

    $query = $this->db->get('users');

因为它在某种程度上是对现有程序的重构,所以我必须添加一个新功能 - 'groups',它不属于用户表的一部分,因此我添加了键['groups']=>以及循环查询结果的值:

$users = array();
foreach ($query->result_array() as $user) {
    $users[] = array_merge($user, array('groups' =>''));
}

$count = sizeof($users);
//Adding groups id's as values to the group key         
foreach ($this->getGroupsAndUsers() as $group) {
    for ($i = 0; $i < $count; $i++) {
        if ($users[$i]['id'] == $group['user_id']) {
            //Begin check
            if ($users[$i]['groups'] == '') {
                $users[$i]['groups'] .= $group['group_id'];
            } else {
                $users[$i]['groups'] .= "," . $group['group_id'];
            }
            //End of check 
        }
    }       
}
$result = $users;
return $result;

将最终数组传递给 $result 变量,这应该是全部,但是当我尝试搜索某个用户时,我收到此错误:

<p>Error Number: 1054</p><p>Unknown column 'groups' in 'where clause'</p><p>SELECT `id`, `email`, `firstname`, `lastname`, `usertype`, `ts_created`, `ts_last_login`, `position`
FROM (`users`)
WHERE  `firstname`  LIKE '%stefan%'
OR  `firstname`  LIKE '%stefan%'
OR  `lastname`  LIKE '%stefan%'
OR  `email`  LIKE '%stefan%'
OR  `position`  LIKE '%stefan%'
OR  `groups`  LIKE '%stefan%'

它说组是未知列,并且在选择中丢失了它,但我不确定这是真正的问题,因为我实际上看到了组并且在管理面板中有一个 UI。另外,作为一名 MySQL 菜鸟,我认为得到这样的查询有点奇怪:

WHERE  `firstname`  LIKE '%stefan%'
    OR  `firstname`  LIKE '%stefan%'
    OR  `lastname`  LIKE '%stefan%'
    OR  `email`  LIKE '%stefan%'
    OR  `position`  LIKE '%stefan%'
    OR  `groups`  LIKE '%stefan%'

我的意思是,这是

or_like
获得相同值的正常行为吗?

最后,因为我真的迷失了这里,如果有人可以提供帮助或建议可能导致此问题的原因,我将非常感激。

php mysql codeigniter activerecord
1个回答
0
投票

我在ellislab论坛找到了类似codeigniter和or_like问题的答案https://ellislab.com/forums/viewthread/185983/ 而不是使用

$this->db->like('location', $your_string);

用途:

$this->db->where('location LIKE', '%'.$your_string.'%');

or_where 而不是 or_like

© www.soinside.com 2019 - 2024. All rights reserved.