2012-03-13 3 views
0

При просмотре сводки InventoryCategory я могу получить Inventory, но не InventoryImages. Ошибка, отмеченная CakePHP, - это [Модель «Инвентарь» не связана с моделью «InventoryImage»]. Эти модели я использующие:CakePHP Model Extended Association

class InventoryCategory extends InventoriesAppModel { 
public $hasMany = 
    array(
      'Inventory' 
     , 'InventoryCategoryImage' => array 
      (
        'className' => 'Media.MediaImage' 
       , 'foreignKey' => 'foreign_key' 
       , 'conditions' => array(
           'InventoryCategoryImage.model' => 'InventoryCategoryImage' 
          , 'InventoryCategoryImage.group' => 'Inventory Category Image' 
          , 
       ) 
       , 'dependent' => true 
       , 
      ) 
     , 
    ); 

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

} 

class Inventory extends InventoriesAppModel { 

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

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

public function containedModels() 
{ 
    $contain = array(
       'User' 
      , 'InventoryCategory' 
      , 
    ); 
    return $contain; 
} 

} 
+0

Является ' 'рекурсивным' => 2' в вашей находке() вызов? Кроме того, отправьте запрос на поиск, который даст вам эту ошибку. – Costa

+0

Нет. Я не использую рекурсивный. Содержите вместо этого. – radarhill

+0

'code'public вид функции() { если { \t $ this-> перенаправлять ($ this-> реферер()) ($ this-> PARAMS [ 'ID']!); } $ условия \t = (is_numeric ($ this-> params ['id'])) \t ? array ($ this-> modelClass. '.id =' => $ this-> params ['id']) \t \t \t: array ($ this-> modelClass. '.slug =' => $ this-> params ['id']); $ пункт \t \t = $ это -> {$ this-> modelClass} -> находка ( \t \t \t 'первый' \t \t \t, массив ( \t \t \t \t 'условия' \t => $ условия \t \t \t \t, 'содержит' \t => $ это -> {$ this-> modelClass} -> containedModels() \t \t \t) \t); $ this-> set (compact ('item')); } 'code' – radarhill

ответ

0

Проблема заключается в том, что, объявив $hasMany в InventoryCategory заменить и удалить $hasMany массив из класса его родителя.

Таким образом, декларация $hasMany должна содержать ассоциации родителей, чтобы заставить ее работать.

Другой подход заключается в добавлении новых ассоциаций в массив родительского $hasMany.
Вопрос здесь: какой обратный вызов использовать. Я не знаю (я тоже ищу ответ). До сих пор я считаю, что public function __construct() является наиболее подходящим.

Как это:

public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct(); 

    // adding Blog-specific Card-association. 
    // Blog is a class extending some other class that does not know about the Class association. 
    $this->belongsTo['Card'] = array(
     'className' => 'Card', 
     'foreignKey' => 'card_id' 
    ); 
}