CakePHP Модель Расширенная Ассоциация - PullRequest
0 голосов
/ 13 марта 2012

При просмотре сводки категории инвентаря я могу получить инвентарь, но не изображения инвентаризации.CakePHP сообщает об ошибке [Модель "Inventory" не связана с моделью "InventoryImage"].Вот модели, которые я использую:

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

}

1 Ответ

0 голосов
/ 09 мая 2013

Проблема в том, что, объявив $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'
    );
}
...