CodeIgniter с активными записями и or_like - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть административная панель с просмотром всей информации о пользователях, полученной из таблицы базы данных с именем «users».

Там есть окно поиска, и я использую Active records для извлечения данных.Но, похоже, проблема в этом, и я не могу понять это.Я почти уверен, что он в части 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%'

itговорит, что группы - это неизвестный столбец, и его нет в списке выбора, но я не уверен, что это реальная проблема, потому что я на самом деле вижу группы и у меня есть интерфейс в админ-панели.Кроме того, будучи нубом 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 для получения того же значения?

И в конце, потому что я действительно потерян здесь, если кто-то может помочь или предложить, что может вызвать эту проблему, будет очень признателен.

1 Ответ

0 голосов
/ 10 февраля 2015

Я нашел ответ для проблемы codeigniter like и or_like на форуме ellislab https://ellislab.com/forums/viewthread/185983/ Вместо использования

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

использование:

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

и or_where вместо or_like .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...