2013-02-18 11 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 

मैं उत्पादप्लान के खिलाफ उत्पाद का नाम और योजना नाम खोजना चाहता हूं, यदि उत्पाद आईडी और उत्पाद के लिए प्लान आईडी उत्पादपैन में मौजूद है तो योजना और उत्पाद का नाम दिखाएगा, मैंने बहुत कोशिश की, संबंध बी/डब्ल्यू टेबल सही लेकिन मैं सटीक डेटा नहीं मिला, क्वेरी जो मैं का उपयोग किया जाताकेकफ़्पी में विदेशी कुंजी के माध्यम से डेटा कैसे खोजें?

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

अगर कुछ शरीर मेरी मदद, मैं उसे करने के लिए बहुत thaksful हूँ है। अग्रिम में धन्यवाद।

रिलेशन योजना के लिए

class Plan extends AppModel{ 

public $primaryKey='plan_id'; 

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

उत्पाद

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' 
    ), 
); 

}

उत्तर

6

आप बस हमें में सक्षम होना चाहिए ई 'युक्त': -

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

यह आपके सभी उत्पादों को उनकी संबंधित योजनाओं के साथ वापस कर देगा। आपके उत्पाद और योजना मॉडल के पास एक हैडबेलोंग बहुत सारे रिश्ते की आवश्यकता है। आपकी जॉइन टेबल के लिए मॉडल को परिभाषित करने की कोई आवश्यकता नहीं है।

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

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

एक साइड नोट के रूप में मैं व्यक्तिगत रूप से प्राथमिक कुंजी को संभालने के केकपीएचपी के डिफ़ॉल्ट तरीके से ओवरराइड करने से बचता हूं। सम्मेलन के साथ रहना बेहतर है और id का उपयोग करना बेहतर है।

+0

मैंने इसका उपयोग किया है, लेकिन उत्पाद दोहरा रहा है, उदाहरण के लिए यदि उत्पाद (अल्फा) में दो योजनाएं हैं (ए और बी), तो एप्ला ने इसे स्वयं दोहराया। – usii

+0

मैं चाहता हूं कि यदि उत्पाद एक है और योजना योजना के खिलाफ कई है तो यह पहले उत्पाद के रूप में लिखा गया है तो योजना – usii

+0

के खिलाफ उत्पाद सुनिश्चित नहीं है कि मैं आपका अनुसरण करता हूं। क्या आपका मतलब है कि आप अपने सभी उत्पादों को अपनी संबंधित योजनाओं के साथ लौटाना चाहते हैं? इस तरह कुछ $-> उत्पाद-> ढूंढें ('सभी', सरणी ('युक्त' => सरणी ('योजना')) – drmonkeyninja

संबंधित मुद्दे