2014-05-23 123 views
0

我有一個Product_faq類,它與Product類具有$ has_many關係。我有一個與Product_faq類具有$ has_many關係的Product類。這兩個類使用product_faqs_products表連接。CodeIgniter與DataMapper相關的數組對象

我試圖將所有Product_faq對象作爲數組獲取,其中每個對象都包含一個「product」屬性,其中包含與該Product_faq相關的Product對象的數組。下面是我現在怎麼做:

$faqs = new Product_faq(); 
$faqs->where('deleted', 0)->get(); 

$data['faqs'] = array(); 

foreach($faqs as $faq){ 
     $faq_array = $faq->to_array(); 

     $products = new Product(); 
     $faq_array['product'] = $products->where_related($faq)->where_join_field($faq, 'deleted', 0)->get()->all_to_array(); 

     $data['faqs'][] = $faq_array; 
} 

print_r($data['faqs']); 

我覺得有可能是一個更好的方式來做到這一點使用的DataMapper的內置功能,但我不能弄明白。有沒有人知道一個更有效的方法來完成這個?

回答

0

您是否考慮在prodct_faq類中設置屬性auto_populate_has_many?它會自動加載所有關於特定類的所有關係 - 方便,但是如果你有大量數據和許多關係,則會耗費更多的資源。另外,關係表的標準名稱應該是product_product_faq。

這大概是這樣,我會做到這一點:

class Product_faq extends DataMapper { 
    ... 
    $auto_populate_has_many = TRUE; 
    ... 
} 

$faqs = (new Product_faq)->where('deleted',0)->get(); 

print_r($faqs->all_to_array()); 

如果你不總是想急於負載你有很多的關係,你可以不喜歡這個:

$faqs = (new Product_faq)->where('deleted',0)->get(); 

$faqs->product->get(); 

print_r($faqs)->all_to_array()); 
+0

感謝jonixj。據我所知,沒有傳入字段的'all_to_array()'不包含相關模型。它只包含父模型的數據庫字段。你有沒有看到其他?我相信你對錶名稱不正確。標準連接表名稱應該是這些類的多個版本的組合。在我的情況下,正確的是'product_faqs_products'。 – flyingL123