【发布时间】:2026-02-04 15:30:01
【问题描述】:
我有两个表: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 以便在获取和 internet_access_codes 记录时拉取相关的 radacct 记录。 p>
代码如下:
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:未知列 'where 子句'中的'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.xascendsessionsvrkeyFROMradacctASRadacct其中InternetAccessCode.code=Radacct.username和InternetAccessCode.fk_ship_id=Radacct.fk_ship_idANDRadacct.deleted1
在 app_model 中,我还添加了可包含的行为以防万一,但没有任何区别。
【问题讨论】:
标签: cakephp cakephp-1.3 cakephp-model