我有两张桌子,比如说:
TAB1
----
id
tab1_md5
TAB2
----
id
tab2_md5
我想创建一个没有foreignKey的hasMany关系,以便能够使用cakephp递归的东西,但不知道如何创建关系。 我试过了:
var $hasMany = array(
'Tab2' => array(
'className' => 'Tab2',
'foreignKey' => false))
但我不知道我应该在条件中指定什么
编辑:关系是tab1.tab1_md5 = tab2.tab2_md5
答案 0 :(得分:0)
我不相信你可以在不使用外键的情况下做一个hasMany关系。那时CakePHP不知道这些表应该如何相关。在不知道关系的情况下,它不能进行任何连接以包含关联的表数据。
答案 1 :(得分:0)
这是不可能的。 Cake必须执行单独的查询才能获取hasMany数据。在该单独的查询中,它仅使用相关模型的主键。 AFAIK目前无法使用除主键之外的任何东西。因此,您必须手动执行这些查询:
$tab1s = $this->Tab1->find('all', array(...));
$tab2s = $this->Tab2->find('all', array(
'conditions' => array('Tab2.tab2_md5' => Set::extract('/Tab1/tab1_md5', $tab1s))
));
$grouped = array();
foreach ($tab2s as $tab2) {
$grouped[$tab2['Tab2']['tab2_md5']][] = $tab2;
}
foreach ($tab1s as &$tab1) {
$tab1['Tab2'] = isset($grouped[$tab1['Tab1']['tab1_md5']]) ? $grouped[$tab1['Tab1']['tab1_md5']] : array();
}
这些方面的东西。您可以在模型本身的afterFind
回调中自动执行此操作,以获得Cake自动效果。