CakePHP - 扩展模型关联

时间:2012-02-27 04:13:59

标签: cakephp model model-associations

我对我所缺少的东西非常好奇。只有一个例子可以帮助解释,但这里首先是句子问题:Inventory和InventoryCategory - 都有图像关联。当我查看单个InventoryCategory和相关的Inventory时,我想要两个Image关联。目前我只返回了InventoryCategory->图片。没有为库存项目返回图像。这就是我在模型中所拥有的:

Inventory:
 public $belongsTo = 
  array(
     'User' 
   , 'InventoryCategory' 
   , 
  );

 public $hasMany = 
  array(
     'Image' => array
    (
       'className' => 'Media.MediaImage' 
     , 'foreignKey' => 'foreign_key' 
     , 'conditions' => array(
          'Image.model' => 'Inventory' 
        , 'Image.group' => 'Image' 
        , 
       )
     , 'dependent' => true 
     , 'order' => 'Image.rank ASC, Image.id ASC' 
    ) 
   , 
  );

 public function containedModels() 
 {
  $contain = array(
      'Image' 
    , 'User' 
    , 'InventoryCategory' 
    , 
  );
  return $contain;
 }
InventoryCategory
 public $hasOne = 
  array(
    'Image' => array
    (
       'className' => 'Media.MediaImage' 
     , 'foreignKey' => 'foreign_key' 
     , 'conditions' => array(
          'Image.model' => 'InventoryCategory' 
        , 'Image.group' => 'Image' 
        , 
       )
     , 'dependent' => true 
     , 
    ) 
   ,   
  );

 public $hasMany = 
  array(
     'Inventory' 
   , 
  );

 public function containedModels() 
 {
  $contain = array(
      'Image' 
    , 'Inventory' 
    , 
  );
  return $contain;
 }

1 个答案:

答案 0 :(得分:2)

如果你试图在一个find()中拉回两个Image关系,那么你将遇到问题,因为CakePHP只会选择其中一个相同的命名关系,它需要以某种方式消除歧义并且会要么抛出错误,要么只选择第一个找到的关系(这似乎就是你所看到的)。

我建议调用Media.MediaImage的关系,在两种情况下都是唯一的,例如: InventoryImage和InventoryCategoryImage而不仅仅是Image。