2014-05-23 4 views
0

Product 클래스에 $ has_many 관계가있는 Product 클래스가 있습니다. Product_faq 클래스에 $ has_many 관계가있는 Product 클래스가 있습니다. 이 두 클래스는 product_faqs_products 테이블을 사용하여 조인됩니다.CodeIgniter DataMapper 관련 객체 배열

모든 Product_faq 객체를 배열로 가져 오려고합니다. 각 Product_faq와 관련된 Product 객체의 배열을 포함하는 각 "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