hasMany不提取?
也许我只是有一个缓慢的一天,但对于我的生活,我无法弄清楚为什么会发生这种情况。 我在一段时间内没有做过CakePHP,我正在尝试使用1.3版本,但这似乎没有工作......
我有两个模型:
area.php
<?php
class Area extends AppModel {
var $name = 'Area';
var $useTable = 'OR_AREA';
var $primaryKey = 'A_ID';
var $belongsTo = array(
'Building' => array(
'className' => 'Building',
'foreignKey' => 'FK_B_ID',
),
'Facility' => array(
'className' => 'Facility',
'foreignKey' => 'FK_F_ID',
),
'System' => array(
'className' => 'System',
'foreignKey' => 'FK_S_ID',
)
);
}
?>
building.php
<?php
class Building extends AppModel {
var $name = 'Building';
var $useTable = 'OR_BLDG';
var $primaryKey = 'B_ID';
var $hasMany = array(
'Area' => array(
'className' => 'Area',
'foreignKey' => 'FK_B_ID',
)
);
}
?>
OR_AREA
有一个标题为FK_B_ID
的列,指向B_ID
。
如果我运行如下的东西:
$this->Building->find('all', array('recursive' => 2));
即使OR_AREA
表中有大量与建筑物关联的区域,我OR_AREA
为所有建筑物获得空的[Area]
阵列。 不仅如此,查询表甚至不显示CakePHP试图找到OR_BLDG
所有记录OR_BLDG
任何OR_BLDG
。 更令人费解的是,如果我这样做:
$this->Area->find('all');
我得到所有区域,并在适当的时候填充[Building]
数组。
我错过了什么?
编辑:
我的模式的相关部分:
CREATE TABLE ORDB_ADMIN.OR_AREA
(
A_ID NUMBER(8),
NAME VARCHAR2(255 BYTE) NOT NULL,
FK_F_ID NUMBER(8),
FK_S_ID NUMBER(8),
FK_B_ID NUMBER(8)
)
CREATE TABLE ORDB_ADMIN.OR_BLDG
(
B_ID NUMBER(8),
BLDG VARCHAR2(90 BYTE) NOT NULL
)
我确实觉得有必要提一下,我使用的是Oracle,并且我找到了一张似乎描述正在发生的事情的票据,但是它在18个月前关闭,并且没有提供关于问题/做过什么的真实细节纠正它。
我还在1.2 CakePHP Book的“hasMany”部分中发现了一条评论:
如果hasMany关联没有返回任何记录,请检查主键和外键的列类型是否相同。 如果一个是int而另一个是char,那么您将不会从关联中获取任何记录(并且没有警告)。
但是,正如您在上面看到的那样,关键列在两端都是NUMBER(这也是CakePHP希望它们也适用于Oracle的)
最后找出了这是为什么发生。 虽然我在Oracle CakePHP中将所有列都定义为大写,但将它们置于lowercased并且在将自定义列定义为大写时无法找到它们。 因此,将我所有的$ primaryKey和foreignKey定义更改为小写修复了我的问题。
在找出原因之前,我在这个问题上打开了一张票,但我不确定除了可能在本书中做笔记外,还有很多事情要做,以免别人再浪费几天时间:)
我不确定,这是否正确,但你有什么看起来像我不正确foreignKeys区域模型...是这种情况?
在我看来,cakephp 1.3中的belogsTo关联有些问题。 我认为如果将外键更改为area_id
和building_id
一切都会好的。 看看这个帖子。 另一个人有类似的问题,解决方案为他工作。
下一篇: Edit of self referencing HABTM in cakephp works, sometimes