2013-11-23 2 views
0

productfeed에서 제품을 가져 와서 내 데이터베이스에 저장하려고합니다. 이제 cakePHP로이 문제를 해결하는 데 어려움을 겪고 있습니다. "products"테이블을 채우는 것은 꽤 쉽지만 "terms"를 채우고 "products_terms"테이블을 조인하는 것은 어렵습니다. 불완전한 데이터가 데이터베이스에 저장되지 않도록 트랜잭션 ($ dataSource = $ this-> Supplier-> Product-> getDataSource();)을 사용하여 제품을 가져옵니다. 이제 용어 테이블이 용어 id에 대해 AutoIncrement를 사용하기 때문에 용어의 ID를 알고 난 후에 만 ​​products_terms 테이블을 채우는 것이 어렵습니다. ID가 아직 존재하지 않으면 products_terms 테이블을 채울 항목을 알 수 없습니다.cakePHP로 테이블 조인하기

https://www.dropbox.com/s/pfakd7xplsvr7cc/db_erd.PNG

아래에있는 내 ERD 사람이 이것에 대한 해결책을 알고 있나요보기?

배열 나는 데이터베이스

array(
    'Product' => array(
     'slug' => 'c24b626d6701d3b07e30b233b989ff8811', 
     'product_name' => 'DAHLIA 5A', 
     'price_new' => '159.00', 
     'affiliate_url' => 'http://ad.zanox.com/ppc/?utm_source=zanox&utm_medium=banner&utm_campaign=product]]', 
     'product_id_supplier' => 'c24b626d670133d3b07e30b2b989ff8811', 
     'supplier_id' => 'zizigo_tr', 
     'feedimport_id' => (int) 1 
    ), 
    'Image' => array(
     (int) 0 => array(
      'image' => 'zizigo_tr_5290e6d296084.JPG' 
     ) 
    ), 
    'Term' => array(
     'Term' => array(
      (int) 0 => array(
       'name' => 'Tommy Hilfiger' 
      ) 
     ) 
    ) 
) 

그리고 내 모델에 보내

class Product extends AppModel { 
    public $name = 'Product'; 
    public $primaryKey = 'product_id'; 

    public $hasMany = array(
     'Vote', 
     'Image' 
    ); 

    public $hasAndBelongsToMany = array(
     'Term' => array(
      'className' => 'Term', 
      'joinTable' => 'products_terms', 
      'foreignKey' => 'product_id', 
      'associationForeignKey' => 'term_id', 
      'unique' => true 
     ) 
    ); 

    public $belongsTo = array(
     'Supplier' 
    ); 
} 

class Term extends AppModel { 
    public $name = 'Term'; 
    public $primaryKey = 'term_id'; 

    public $hasAndBelongsToMany = array(
     'Product' => array(
      'className' => 'Product', 
      'joinTable' => 'products_terms', 
      'foreignKey' => 'term_id', 
      'associationForeignKey' => 'product_id', 
      'unique' => true 
     ) 
    ); 
} 
+1

지금까지 시도한 일부 코드를 표시하면 문제를 찾는 데 도움이 될 수 있습니다. 모델은 어떻게 연관되어 있습니까? 현재 컨트롤러 로직은 어떻게 생겼습니까? – Oldskool

+0

그냥 내 대답을 편집했습니다 :) –

+0

데이터를 가져 오는 코드는 어디에 있습니까? –

답변

0

문제 해결. Terms 테이블을 채울 필요가있는 것 같습니다. 그렇지 않으면 cakePHP는 연결할 용어를 모른다.

적절한 해결 방법은 먼저 용어를 확인하거나 용어가 존재하는지 확인한 다음 용어 표에 용어를 삽입 한 다음 삽입 배열의 용어 ID를 사용하여 HABTM을 사용하여 제품을 삽입하므로 products_terms 테이블 또한 채워질 것입니다.

관련 문제