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

Я хочу найти имя продукта и название плана для ProductPlan, если идентификатор продукта и идентификатор плана для продукта существуют в ProductPlan, тогда будет отображаться имя плана и продукта, я много пробовал, отношения b/w tables правильно, но я не получить точные данные, запрос, который я использовал этоКак найти данные через внешний ключ в cakephp?

 $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

Вы просто должны быть в состоянии к нам e 'содержать': -

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

Это вернет все ваши продукты с соответствующими планами. Модели вашего продукта и плана нуждаются в отношениях hasAndBelongToMany. Нет необходимости определять модель для вашей таблицы соединений.

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

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

В качестве побочного примечания я бы лично избегал переопределять метод CakePHP по обращению с первичными ключами. Лучше придерживаться конвенции и использовать id.

+0

Я использовал его, но продукт повторяется, например, если продукт (альфа) имеет два плана (a и b), то aplha повторил его сам. – usii

+0

Я хочу, чтобы, если продукт один и план много против плана, поэтому он написал как первый продукт, а затем продукт против плана – usii

+0

Не уверен, что я последую за тобой. Вы хотите, чтобы все ваши продукты возвращались со связанными с ними планами? Что-то вроде $ this-> Product-> find ('all', array ('contains' => array ('Plan')). ​​ – drmonkeyninja