我已经为这个问题挣扎了一段时间,并且在我的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');
}
表结构
我能够通过以下更改使其工作:
物业模型
改变:
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
然后清除缓存