Учение toarray не конвертирует отношения - PullRequest
0 голосов
/ 25 марта 2010

Я начал учение, чтобы начать. Вот документация .

Мой код

$User = Doctrine_Core::getTable("User")->find(1);

когда я получаю доступ к отношениям по $ User-> Phonenumbers, это работает. Когда я преобразую объект User в массив с помощью метода toArray (), он не преобразует отношения в массив. Он просто отображает данные $ User.

Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 25 марта 2010

Используя метод find, вы извлекали только данные пользователя, поэтому возврат toArray ограничен этими данными. Вам нужно указать дополнительные данные для загрузки, и лучшее место для этого обычно находится в исходном запросе. Из примера, на который вы ссылаетесь, добавьте выделенную часть:

$q = Doctrine_Query::create()
    ->select('u.*, e.*, p.*')  // Example only, select what you need, not *
    ->from('User u')
    ->leftJoin('u.Email e')
    ->leftJoin('u.Phonenumbers p')
    ->where('u.id = ?', 1);

Затем, когда toArray'ing результаты этого, вы должны увидеть соответствующие данные электронной почты и номера телефона.

0 голосов
/ 20 апреля 2011

Я также заметил аномалию с этим, когда если вы сначала вызываете отношение, а затем вызываете ToArray, то отношение как-то включается. Я имею в виду, что, взяв свой собственный, например,

$User = Doctrine_Core::getTable("User")->find(1); 
$num= $User->Phonenumbers->office; // assumed a field 'office' in your phone num table
$userArray = $user->toArray(true);

В приведенном выше случае $ userArray каким-то образом содержит целые отношения. если мы удалим присвоение $ num, это не так.

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

...