查询查询中返回奇怪的数据结构

时间:2014-01-30 10:08:27

标签: php mysql cakephp model cakephp-2.3

我有以下模型,它们之间有以下关系(我刚刚发布了相关的相关信息)。

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。

所以有人可以给我一个提示,为什么会这样?我不明白为什么这个结果会比其他人产生不同的结果。

1 个答案:

答案 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"
      }
   }
}