Может быть, у меня просто медленный день, но из-за жизни я не могу понять, почему это происходит. Я давно не делал 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));
Я получаю пустые [Area]
массивы для всех зданий, даже если в таблице OR_AREA
есть много областей, связанных со зданиями. Более того, таблица запросов даже не показывает, что CakePHP пытался найти что-либо, кроме всех записей в OR_BLDG
. Тем более удивительно, если я сделаю:
$this->Area->find('all');
Я получаю все Области и массивы [Building]
заполняются при необходимости.
Чего мне не хватает?
Edit:
Соответствующие части моей схемы:
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 месяцев назад и не было предоставлено никаких реальных сведений о том, в чем заключалась проблема / что было сделано для ее устранения.
Я также нашел комментарий в разделе «hasMany» книги 1.2 CakePHP, который гласит:
Если ваша ассоциация hasMany не возвращает никаких записей, проверьте, совпадают ли типы столбцов первичного ключа и foreignKey. Если один тип int, а другой тип char, вы не получите никаких записей от ассоциации (и никаких предупреждений).
Но, как вы можете видеть выше, ключевые столбцы - это ЧИСЛА на обоих концах (это то, что CakePHP хочет, чтобы они были и для Oracle)