2009-10-01 2 views
2

Использования Doctrine PHPPHP Доктрина - записи, связанные с погрузочными

Если у меня есть пользователь с многим ко многим отношений с моделью адресом и каждый адрес имеет внешний ключ для типа адреса (дом, офис). 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 

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

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

ответ

3

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

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

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

2

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

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

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

Смежные вопросы