提问者:小点点

CakePHP模型关联深度模型包含


我已经为这个问题挣扎了一段时间,并且在我的CakePHP应用程序中匹配了与各种其他模型的关联,但是仍然无法获得包含关联ExpenseType的结果数组。

一切从属性开始,定义为:

var$recursive=2;

var$actsAs=array('Containable');

模范协会

财产有很多账单

账单财产至财产

比尔有一种支出类型

属于账单的费用类型

在我的PropertiesController中,我调用并分配给$property:

$这个-

这导致:

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
            )

    )
)

就我个人而言,我无法让数组包含Bill下ExpenseType的详细信息。请给我一些建议!

更新:在模型上设置contain方法时,Cake now报告:

型号"Bill"与型号"ExpenseType"不关联

票据模型

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

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

费用型模型

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

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

表结构

  • 账单
  • id

共2个答案

匿名用户

我能够通过以下更改使其工作:

物业模型

改变:

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

致:

public$hasMany=数组('Bill');

票据模型

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

费用型模型

public$hasMany=数组('Bill');

属性模型中的无效关联似乎仍然允许查询账单,但不知何故,却打乱了更深层次的关联。不知道为什么它会在一段时间内工作。

匿名用户

一些建议:

1.)将recursive移到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

费用型模型

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

然后清除缓存