Доктрина PHP - загрузка связанных записей

Использование доктрины 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

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

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


person Rockett    schedule 01.10.2009    source источник


Ответы (2)


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

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

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

person virtualize    schedule 14.10.2009

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

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

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

person Chris Williams    schedule 06.11.2009