CakePHP - 扩展模型关联

标签 cakephp model model-associations

我很好奇我错过了什么。只有一个例子可以帮助解释,但首先是句子问题:Inventory 和 InventoryCategory - 都有图像关联。当我查看单个 InventoryCategory 和相关 Inventory 时,我想要两个图像关联。目前我只返回了 InventoryCategory->Image。库存元素不会返回任何图像。这就是我在模型中的内容:

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;
 }

最佳答案

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

我建议在这两种情况下将与 Media.MediaImage 的关系称为唯一的,例如InventoryImage 和 InventoryCategoryImage 而不仅仅是图像。

关于CakePHP - 扩展模型关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459990/

相关文章:

ruby-on-rails - ActiveSupport::关注和扩展mongoid模型

caching - Ember 缓存模型

c# - 如何在绘制前调整网格模型的位置

java - 具有额外列的多对多 Hibernate 映射

php - cakePHP 3.0 上传图片

CakePHP 在下拉菜单中增加年份范围

php - 来自mysql存储过程和php json_decode的正确格式的关联数组

ruby-on-rails - Rails - 如何通过模型有很多关联来订购模型?

ruby-on-rails-3 - 如何取消 before_add 关联回调中的保存?

iphone - 使用我自己的服务器创建安全 ios 身份验证的正确原因是什么