CakePHP 1.2.6 / PHP5.2.12 Ошибка в цикле массива при назначении по ссылке - PullRequest
0 голосов
/ 25 февраля 2010

Я работаю над получением стека данных, и по какой-то причине некоторые данные повреждены. Например, у меня есть несколько моделей сообщений, каждая из которых связана с моделями комментариев (hasMany), и каждая из моделей комментариев принадлежит пользователю. При получении данных вот что я получаю из базы данных для комментариев:

[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
        )

)

Первый символ каждого из массивов Comments [i] [User] был заменен на заглавную U, хотя в каждом случае он должен отличаться (например, ID 18, имя пользователя Jace и т. Д.).

Я проследил это до манипуляций с массивами, с которыми работал, чтобы назначить поле _explicitType для взаимодействия Flex (спасибо, Павел Мисиор!) В функции afterFind (). Вот цикл, в котором я застрял в _explicitType:

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

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

Я предполагаю, что это связано с заданием по ссылке, но я не могу понять, почему это происходит.

Ответы [ 2 ]

0 голосов
/ 02 марта 2010

Я думаю, что нашел проблему. Я переместил проверку массива внутри 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 голосов
/ 26 февраля 2010

Это очень странно.

Установите для debug значение 2 в core.php и посмотрите в журнале sql внизу страницы, возможно, вы найдете там что-нибудь.Также просмотрите все модели (приложение, пост, пользователь, комментарий).Там могут быть некоторые beforeFind (), которые вызывают это.Это также происходит, когда вы делаете простой User-> find ()?

Btw.Как вы получаете данные здесь?

...