2010-02-25 18 views
0

我正在检索一堆数据,出于某种原因某些数据被破坏。例如,我有一些Post模型,每个模型都与评论模型(hasMany)相关,并且每个评论模型都属于一个用户。检索数据时,这里就是我从数据库中获取的意见:CakePHP 1.2.6/PHP5.2.12数组中的循环错误分配引用

[Post] => Array 
(
) 

[Comments] => Array 
(
    [0] => Array 
     (
      [content] => "2010 has definitely been a busy year!" 
      [created] => 2010-02-10 13:47:15 
      [user_id] => 18 
      [post_id] => 1 
      [User] => Array 
       (
        [id] => U8 
        [username] => Uace 
        [first_name] => Uace 
       ) 

      [_explicitType] => Comment 
     ) 

    [0] => Array 
     (
      [content] => "I can't wait..." 
      [created] => 2009-12-10 13:57:36 
      [user_id] => 18 
      [post_id] => 1 
      [User] => Array 
       (
        [id] => U8 
        [username] => Uace 
        [first_name] => Uace 
       ) 

      [_explicitType] => Comment 
     ) 

) 

每个评论的第一个字符[I] [用户]数组已经被替换成一个大写的U,但在每种情况下它应该是不同的(例如ID为18,Jace的用户名等)。

我将其追溯到一个数组操作,我正在为afterFind()函数中的Flex交互(谢谢,PawełMysior!)分配_explicitType字段。这里就是我被困在_explicitType循环:

if (is_array($results)) { 
    foreach ($results as &$item) 
    { 
      $item['_explicitType'] = $this->name; 

    } 
} else { 
    $item[$this->name]['_explicitType'] = $this->name; 
} 

我认为它具有与参考分配的事,但我想不出为什么它正在发生。

+0

FOR循环似乎在不破坏数组的情况下工作,但在试图处理没有数字索引的数组时,它会变得混乱。 –

回答

0

我觉得找到了问题。我在foreach()中移动了数组的检查,现在似乎工作正常。我认为这是因为在非数组项目上,它实际上破坏了一些东西。这里是我在测试用例上登录的改变循环:

foreach ($results as &$item) 
{ 
    if(is_array($item)) { 
     $item['_explicitType'] = $this->name; 
    } else { 
     $copy = $item; 
     $copy['_explicitType'] = $this->name; 
     $this->log($copy, LOG_DEBUG); 
    } 
} 

当然,它用大写字母U取代了第一个字母来记录数据。

0

这很奇怪。

在core.php中将debug设置为2,并在页面底部的sql日志中查找,也许你会在那里找到一些东西。也看看所有模型(应用程序,帖子,用户,评论)。可能会有一些beforeFind()导致这种情况发生。当你做一个简单的User-> find()时,它是否也会发生?

Btw。你如何在这里检索数据?

+0

啊,我想我找到了。我正在用afterFind()做一些事情。看到上面修改后的帖子 –