我有一个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的内置功能可能有更好的方法,但我无法弄明白。有谁知道更有效的方法来实现这个目标?
答案 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());