PHP Doctrine - загрузка связанных записей - PullRequest
2 голосов
/ 01 октября 2009

Использование Doctrine PHP

Если у меня есть пользователь со связями «многие ко многим» с адресом модели, и у каждого адреса есть внешний ключ к типу адреса (домашний, офисный). Doctrine не загружает автоматически связанные записи для этого типа адреса.

$user = Doctrine::getTable('User')->findOneById(1); // bob
echo $user->Address[0]->address_type_id; // 4
echo isset($user->Address[0]->AddressType); // false
$user->Address[0]->refreshRelated(); // or $user->Address[0]->loadReference('AddressType');
echo isset($user->Address[0]->AddressType); // true
echo $user->Address[0]->AddressType->name; // office

Не уверен, что это ошибка или нет в доктрине или моей модели.

Но лучше ли загружать соответствующие модели за пределы одного уровня или есть другой способ достижения того же результата?

Ответы [ 2 ]

3 голосов
/ 14 октября 2009

Вы просто пытались объединить свои отношения один за другим? Работает довольно хорошо, если ваши отношения настроены правильно.

$user = Doctrine::getTable('User')
  ->createQuery('u')
  ->leftJoin('u.Address a')
  ->leftJoin('a.AddressType t')
  ->findOneById(1);

Вы также сэкономите свои SQL-запросы на 2 дБ по сравнению с вашим примером.

2 голосов
/ 06 ноября 2009

Вы говорите, что не можете этого сделать:

echo $user->Address[0]->AddressType->name;

Если вы попытаетесь сделать это без isset, Doctrine следует проверить, установлено ли значение, прежде чем автоматически его получить.

...