CakePHP модель ассоциации глубокая модель содержит

Я уже некоторое время борюсь с этой проблемой и сопоставляю ассоциации с различными другими моделями в моем приложении CakePHP, но все еще не могу получить массив результатов, содержащий связанный ExpenseType.

Все начинается со свойства, которое определяется как:

  

var $ recursive = 2;

     

var $ actsAs = array ('Containable');

Модельные ассоциации

Свойство имеет много счетов

Билл принадлежит собственности

Билл hasOne ExpenseType

ExpenseType принадлежит Биллу


В My PropetiesController я вызываю и присваиваю $ property:

  

$ этом- > & GT Недвижимость-; findById ($ ID);

В результате:

Array
(
[Property] => Array
    (
        [id] => 2
        [address] => **
        [bedrooms] => 2
        [bathrooms] => 1.5
        [square_footage] => 973
        [zip_code] => **
        [created] => 2013-08-13 18:30:34
        [modified] => 2013-08-15 19:08:32
    )

[Bill] => Array
    (
        [0] => Array
            (
                [id] => 2
                [expense_type_id] => 1
                [property_id] => 2
                [frequency] => monthly
                [start_date] => 2013-09-16
                [payee] => **
                [amount] => **
                [created] => 2013-08-20 19:57:41
                [modified] => 2013-08-20 20:57:02
            )

        [1] => Array
            (
                [id] => 4
                [expense_type_id] => 4
                [property_id] => 2
                [frequency] => monthly
                [start_date] => 2013-09-15
                [payee] => **
                [amount] => 195
                [created] => 2013-08-20 20:38:11
                [modified] => 2013-08-20 20:38:11
            )

    )
)

Для жизни я не могу получить массив, чтобы содержать детали ExpenseType под Биллом. Предложения, пожалуйста!

ОБНОВЛЕНИЕ: при установке метода содержимого для модели, Cake теперь сообщает:

  

Модель "Билл" не связана с моделью "ExpenseType"

Модель Билла

    class Bill extends AppModel {
        /*******************
        * Variables        *
        *******************/
        var $actsAs = array('Containable');

        /*********************
        * Model Associations *
        **********************/
        public $belongsTo = array('Property');
        public $hasOne = array('ExpenseType');
    }

Модель ExpenseType

class ExpenseType extends AppModel {
    /*******************
    * Variables        *
    *******************/
    var $actsAs = array('Containable');

    /*******************
    * Model Associations      *
    *******************/
    public $belongsTo = array('Bill');
}

Структура таблицы

  • счета
    • ID
    • expense_type_id
    • PROPERTY_ID
    • ...
  • expense_types
    • ID
    • имя
    • Описание
4 голоса | спросил Brian Kerr 22 PM00000090000000831 2013, 21:58:08

2 ответа


0

Мне удалось заставить это работать, внеся следующие изменения:

Модель собственности

Изменено:

public $hasMany = array(
        'Bill' => array(
            'className' => 'bills',
            'foreign_key' => 'property_id',
            'dependent' => true
            )
        );

To:

  

public $ hasMany = array ('Bill');

Модель Билла

  

public $ ownTo = array ('Property', 'ExpenseType');

Модель ExpenseType

  

public $ hasMany = array ('Bill');

Кажется, недопустимая связь в модели свойств все еще позволяла запрашивать счета, но каким-то образом испортила более глубокие ассоциации. Не уверен, почему это будет работать период.

ответил Brian Kerr 22 PM000000110000002931 2013, 23:36:29
0

Некоторые предложения:

1.) Переместите рекурсив в PropertiesController прямо перед findById

$this-Property->recursive = 2;

2.) Используйте сдерживаемое поведение в моделях Bill и ExpenseType

var $actsAs = array('Containable');

... затем в PropertiesController сделать ...

$this->Property->contain(array(
    'Bill' => array(
        'ExpenseType'
    )
));

$this->set('property', $this->Property->findById($id));

ОБНОВЛЕНИЕ № 1:

Билл Модель

class Bill extends AppModel {
    /*******************
    * Variables        *
    *******************/
    var $actsAs = array('Containable');


    /*********************
    * Model Associations *
    **********************/
    public $belongsTo = array(
        'Property' => array(
            'className' => 'Property',
            'foreignKey' => 'property_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'ExpenseType' => array(
            'className' => 'ExpenseType',
            'foreignKey' => 'expense_type_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
    ); // end belongsTo
} // end Bill model

Модель ExpenseType

class ExpenseType extends AppModel {
    /*******************
    * Variables        *
    *******************/
    var $actsAs = array('Containable');


    /*******************
    * Model Associations      *
    *******************/
    public $hasMany = array(
        'Bill' => array(
            'className' => 'Bill',
            'foreignKey' => 'expense_type_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
    ); // end hasMany

} // end ExpenseType model

затем очистите кеш

ответил bowlerae 22 PM000000100000001131 2013, 22:49:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132