2013-08-06 48 views
1

我有一個問題要問。首先,我有一張表,其中父母有parent_id0,孩子有parent_id等號。所有孩子的parent_id被存儲爲json編碼數組(一個孩子記錄可以有許多父母)。Codeigniter Active Record JSON對象中的值

那麼,我怎樣才能獲得父母的所有孩子,當我傳遞一個父母的ID。我嘗試過,但它不會工作,我不知道。

下面的代碼:

function get_child_product($parent_id, $limit, $start) { 
     $this -> db -> from('product'); 
     $this -> db -> where(json_decode('parent_id'), $parent_id); 
     $this -> db -> limit($limit, $start); 
     $this -> db -> order_by('order', 'asc'); 
     $this -> db -> order_by('id', 'desc'); 
     $query = $this -> db -> get(); 
     return $query -> result(); 
    } 

問題解決了:

​​
+0

你能更清楚一點嗎?數據庫中的JSON是什麼?或者你是否向你的功能發送了一系列ID以獲得這些父母的所有孩子? –

+0

是的,我在數據庫中將parent_id數組存儲爲JSON。 – user2657778

回答

2

如果我理解正確的話,你必須與父母關係數據庫一個JSON編碼數組,你想只得到一定父的孩子。問題是數據庫中的JSON對象只不過是字符串,你不能在查詢中動態解碼它們並使用where子句。

你有兩個選擇:

1.Query所有的孩子們,然後用PHP基於解碼JSON它們進行過濾

2.使用MySQL的like以匹配JSON格式的字符串

function get_child_product($parent_id, $limit, $start) { 
    return $this -> db -> from('product') 
        -> like('parent_id', '"parent_id":'.$parent_id) 
        -> limit($limit, $start) 
        -> order_by('order', 'asc') 
        -> order_by('id', 'desc') 
        -> get() 
        -> result(); 
} 

請注意like參數應該與您的JSON的語法匹配,所以如果您將ID包裝在"的引號中,則將它們添加到參數

+0

非常感謝你,問題解決了... – user2657778

1

你確定你不是說

where('parent_id', decoded($parent_id)); 

+0

對不起,我的錯誤,json_decode,未解碼 – user2657778

0

嘗試where_in條款active records

function get_child_product($parent_id, $limit, $start) { 
    $this -> db -> from('product'); 
    $this -> db -> where_in(parent_id, decoded($parent_id)); #changes here 
    $this -> db -> limit($limit, $start); 
    $this -> db -> order_by('order', 'asc'); 
    $this -> db -> order_by('id', 'desc'); 
    $query = $this -> db -> get(); 
    return $query -> result(); 
} 
+0

'parent_id''周圍缺少引號。 – msanford

相關問題