У меня есть две таблицы: internet_access_codes и radacct . internet_access_codes имеет множество radacct записей.Объединение internet_access_codes.code = radacct.username AND internet_access_codes.fk_ship_id = radacct.fk_ship_id
Я создал 2 модели и хотел использовать $hasMany
и $belongsTo
соответственно, чтобы связанные записи radacct были получены при получении и internet_access_codes запись.
Вот код:
class InternetAccessCode extends AppModel{
var $name = 'InternetAccessCode';
var $hasMany = array(
'Radacct' => array(
'className' => 'Radacct',
'foreignKey'=> false,
'conditions'=> array(
'InternetAccessCode.code = Radacct.username',
'InternetAccessCode.fk_ship_id = Radacct.fk_ship_id'
),
)
);
}
class Radacct extends AppModel{
var $name = 'Radacct';
var $useTable = 'radacct';
var $belongsTo = array(
'InternetAccessCode' => array(
'className' => 'InternetAccessCode',
'foreignKey' => false,
'conditions'=> array(
'InternetAccessCode.code = Radacct.username',
'InternetAccessCode.fk_ship_id = Radacct.fk_ship_id'
)
),
);
}
Когда я find()
запись из internet_access_codes Я ожидаю, что это даст мне все соответствующие radacct записи также.Однако я получил ошибку, потому что он не сделал объединение.
Вот результат и ошибка:
Array
(
[InternetAccessCode] => Array
(
[id] => 1
[code] => 1344444440
[bandwidth_allowed] => 20000
[time_allowed] => 30000
[expires_at] => 31536000
[cost_price] => 0.00
[sell_price] => 0.00
[enabled] => 1
[deleted] => 0
[deleted_date] =>
[fk_ship_id] => 1
[downloaded_at] => 2011-09-10 22:18:14
)
[Radacct] => Array
(
)
)
Ошибка: Предупреждение (512): SQLОшибка: 1054: неизвестный столбец «InternetAccessCode.code» в «где предложение» [CORE / cake / libs / model / datasources / dbo_source.php, строка 684]
Запрос: SELECT Radacct
. id
, Radacct
. fk_ship_id
, Radacct
. radacctid
, Radacct
. acctsessionid
, Radacct
. acctuniqueid
, Radacct
. username
, Radacct
. groupname
, Radacct
. realm
, Radacct
. nasipaddress
, Radacct
. nasportid
, Radacct
. nasporttype
, Radacct
. acctstarttime
, Radacct
. acctstoptime
, Radacct
. acctsessiontime
, Radacct
. acctauthentic
, Radacct
. connectinfo_start
, Radacct
. connectinfo_stop
, Radacct
. acctinputoctets
, Radacct
. acctoutputoctets
, Radacct
. calledstationid
, Radacct
. callingstationid
, Radacct
. acctterminatecause
, Radacct
. servicetype
, Radacct
. framedprotocol
, Radacct
. framedipaddress
, Radacct
. acctstartdelay
, Radacct
. acctstopdelay
, Radacct
. xascendsessionsvrkey
ОТ radacct
КАК Radacct
ГДЕ InternetAccessCode
. code
= Radacct
. username
И InternetAccessCode
. fk_ship_id
= Radacct
. fk_ship_id
И Radacct
. deleted
<> 1
В app_model я также добавил поведение на всякий случай, но оно не имело никакого значения.