我有以下模型,它们之间有以下关系(我刚刚发布了相关的相关信息)。
Persona.php
public $hasMany = array(
'PersonaHasLdaphost' => array(
'className' => 'PersonaHasLdaphost',
'foreignKey' => 'persona_id'
)
);
Ldaphost.php
public $hasMany = array(
'PersonaHasLdaphost' => array(
'className' => 'PersonaHasLdaphost',
'foreignKey' => '__ldaphosts_id',
'dependent' => false
)
);
PersonaHasLdaphost.php
public $belongsTo = array(
'Persona' => array(
'className' => 'Persona',
'foreignKey' => 'persona_id',
),
'Ldaphost' => array(
'className' => 'Ldaphost',
'foreignKey' => '__ldaphosts_id',
)
);
我有其他模特,甚至是Persona本身,这种关系工作得很好。
但是有了那些,当我使用find查询数据库时:
$this->Persona->Behaviors->load('Containable');
$options = array('conditions' => array('Persona.' . $this->Persona->primaryKey => $id),
'contain' => array(
'Personaacceso',
'Personainterna',
'PersonaHasLdaphost' => array('Ldaphost')),
'recursive'=>1);
$persona = $this->Persona->find('first', $options);
我得到了这个奇怪的输出:
["PersonaHasLdaphost"]=> array(2) {
[0]=> array(4) {
["id"]=> string(3) "154"
["persona_id"]=> string(3) "315"
["Ldaphost"]=> array(0) {}
["PersonaHasLdaphost"]=> array(1) {
[0]=> array(1) {
["__ldaphosts_id"]=> string(2) "41"
}
}
}
[1]=> array(4) {
["id"]=> string(3) "174"
["persona_id"]=> string(3) "315"
["Ldaphost"]=> array(0) {}
["PersonaHasLdaphost"]=> array(1) {
[0]=> array(1) {
["__ldaphosts_id"]=> string(3) "120"
}
}
}
}
什么时候应该是这样的:
["PersonaHasLdaphost"]=> array(2) {
[0]=> array(4) {
["id"]=> string(3) "154"
["persona_id"]=> string(3) "315"
["__ldaphosts_id"]=> string(2) "41"
["Ldaphost"]=> array(0) {}
}
...
当然,对于“Ldaphost”中的数据,导致ldaphost表中有一个条目用于这些ID。
所以有人可以给我一个提示,为什么会这样?我不明白为什么这个结果会比其他人产生不同的结果。
答案 0 :(得分:0)
我终于设法解决了。
似乎cakePHP不喜欢处理以双下划线开头的数据库表和/或列名:__ oldaphosts表和__ldaphosts_id。
一旦我尝试修改了这两个名字,我的数据就会正确返回:
["PersonaHasLdaphost"]=> array(1) {
[0]=> array(4) {
["id"]=> string(3) "165"
["persona_id"]=> string(3) "455"
["ldaphosts_id"]=> string(3) "120"
["Ldaphost"]=> array(8) {
["id"]=> string(3) "120"
["hostname"]=> string(7) "xxxx"
["ip"]=> string(14) "xxx.xx.xxx.xxx"
["mac"]=> string(17) "xx:xx:xx:xx:xx:xx"
["tipo"]=> string(6) "server"
["encendible"]=> bool(false)
["apagable"]=> bool(false)
["descripcion"]=> string(24) "xxxxxxxxxxxxxxxxxxxxxxx"
}
}
}