2012-04-02 5 views
0

"users"という名前のデータベーステーブルから取得したすべてのユーザー情報を表示する管理パネルがあります。アクティブレコードとor_likeを持つCodeIgniter

検索ボックスがあり、アクティブなレコードを使用してデータを取得します。しかし、それに問題があるようで、私はそれを理解することはできません。私はそれがor_like部分にあると確信していますが、エラーは私を混乱させます。ここで

は、私は1つの変数$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'); 

、私は新しい機能を追加する必要がありました - 'グループのクエリの結果をループ値で>私は、キー[「グループ」] =を追加し、ユーザーテーブルの一部がありません:

$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変数に、最終的な配列を渡すと、しかし、特定のユーザーを検索しようとすると、私はこのROR:

<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のnoobのこと、私はそれがこのようなクエリを取得するために、一種の奇妙だと思う:

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の正常な動作ですか?

最後に、私は本当にここで失われているので、誰かがこの問題を引き起こす可能性のあることを助けたり提案したりできれば、本当に感謝します。

+0

'$ this-> db-> last_query();'の結果を投稿して、CIが構築した実際のSQL文を確認できますか? –

+0

私は関数を使用しているかどうか分かりませんが、これは出力です:string(50) "SELECT' user_id'、 'group_id' FROM(' users_groups') " – Leron

+0

someoenが続き、私がテーブル 'users'に他のものを変更せずにカラム 'groups'を追加すると、助けてくれます... – Leron

答えて

0

私のようなCodeIgniterのための答えを発見し、その代わり

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

使用使用のellislabフォーラムhttps://ellislab.com/forums/viewthread/185983/ でor_like問題:代わりにor_like

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

or_whereを。

関連する問題