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 に対して製品名とプラン名を検索したいのですが、製品 ID と製品のプラン ID が ProductPlan に存在する場合、プランと製品の名前が表示されます。いろいろ試しましたが、関係 b/w テーブルは正しいのですが、わかりませんでした。正確なデータを取得します。使用したクエリは

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

誰かが私を助けてくれたら、私は彼にとても感謝します。前もって感謝します。

計画の関係

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

}

4

1 に答える 1

6

「含む」を使用できるはずです:-

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

これにより、関連するプランとともにすべての製品が返されます。Product および Plan モデルには hasAndBelongToMany 関係が必要です。結合テーブルのモデルを定義する必要はありません。

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

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

補足として、個人的には CakePHP のデフォルトの主キー処理方法をオーバーライドすることは避けたいと思います。慣習に固執し、 を使用することをお勧めしますid

于 2013-02-18T11:09:06.463 に答える