CodeIgniter DataMapper数组中的相关对象

时间:2014-05-23 22:15:06

标签: php codeigniter codeigniter-datamapper

我有一个Product_faq类,它与Product类有$ has_many关系。我有一个Product类,它与Product_faq类有$ has_many关系。使用product_faqs_products表连接这两个类。

我试图将所有Product_faq对象作为数组,包括"产品"每个属性的属性,其中包含与该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的内置功能可能有更好的方法,但我无法弄明白。有谁知道更有效的方法来实现这个目标?

1 个答案:

答案 0 :(得分: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());