2013-02-18 15 views
6
Product  Plan   ProductPlan 
id |name  id |name  id | product_id | plan_id  
1 aplha  1 a   1  1   2    
2 bravo  2 b 
3 charlie 

Ürün adı ve Ürünü ürün planını ÜrünPlan'a karşı bulmak istiyorum, Ürün kimliği için ürün kimliği ve plan kimliği ProductPlan'da mevcutsa, planın ve ürünün adı görünecek, çok çalıştım, ilişki b/w tabloları doğru ama kesin veriler alamadım, ben o kullanılan sorgu bazı vücut bana yardımcı olursa, ben ona çok thaksful olacakcakephp'de yabancı anahtardan veri nasıl bulunur?

 $p_plan = $this->ProductPlan->find('all',array(
            'conditions'=>array(
               'ProductPlan.product_id'=>'Product.product_id' 
               )      
             ) 
            ); 
    $this->set('p_plan', $p_plan); 

olduğunu. Şimdiden teşekkürler.

Planı İçin İlişkisi Ürün Planı

class Plan extends AppModel{ 

public $primaryKey='plan_id'; 

public $hasMany = array(
    'ProductPlan'=>array(
     'className' => 'ProductPlan', 
     'foreignKey' => 'plan_id' 
    ) 
); 

Ürün

class Product extends AppModel{ 

public $primaryKey='product_id'; 

public $hasMany = array(
    'ProductsUser'=>array(
     'className' => 'ProductsUser', 
     'foreignKey' => 'product_id' 
    ), 
    'ProductsUserNode'=>array(
     'className' => 'ProductsUserNode', 
     'foreignKey' => 'product_id' 
    ), 
    'ProductPlan'=>array(
     'className' => 'ProductPlan', 
     'foreignKey' => 'product_id' 
    ) 
); 

class ProductPlan extends AppModel{ 
var $primaryKey='product_plan_id'; 
public $belongsTo = array(
    'Product' => array(
     'className' => 'Product', 
     'foreignKey' => 'product_id' 
    ), 
    'Plan' => array(
     'className' => 'Plan', 
     'foreignKey' => 'plan_id' 
    )  

    ); 
public $hasMany = array(
    'ProductPlansUserNode'=>array(
     'className' => 'ProductPlansUserNode', 
     'foreignKey' => 'product_plan_id' 
    ), 
); 

}

cevap

6

Sadece bizim gerekir e 'içerir': -

$p_plan = $this->Product->find('all', array(
    'contain' => array('Plan') 
)); 

Bu, tüm ürünlerinizi ilişkili planlarıyla birlikte iade edecektir. Ürün ve Plan modelleriniz bir hasAndBelongToMany ilişkisine ihtiyaç duyar. Birleştirme tablonuz için bir model tanımlamanıza gerek yoktur. Ben şahsen birincil anahtarları taşıma CakePHP'nin varsayılan yolu geçersiz kılarak kaçınacağınız bir yan not olarak

class Product AppModel { 
    ... 
    public $hasAndBelongsToMany = array('Plan'); 
    ... 
} 

class Plan AppModel { 
    ... 
    public $hasAndBelongsToMany = array('Product'); 
    ... 
} 

. Sözleşmeye bağlı kalmak ve id'u kullanmak daha iyidir.

+0

kullandım, ancak ürün yineleniyor, örneğin ürün (alfa) iki plana sahipse (a ve b), o zaman aplha kendini tekrarladı. – usii

+0

Eğer bir ürün ise ve planın birçoğu plana karşı bir çok ise, bu ürünün ilk ürün olarak yazıldığını, ardından ürünün – usii

+0

planına uygun olmasını istiyorum. Tüm ürünlerinizin ilişkili planlarıyla geri dönmesini mi istiyorsunuz? $ This-> Product-> $ gibi bir şey ('all', array ('içerir' => dizi ('Plan')) – drmonkeyninja

İlgili konular