2013-02-20 3 views
0

У меня очень простой вопрос. В настоящее время я использую метод Doctrine2 findAll() после метода getRepository, и у меня есть простая настройка отношений OneToOne (Manufacturers имеет поле address_id, которое ссылается на Addresses, основные вещи). Я пытаюсь заполнить таблицу одним полем из Manufacturer, а остальные поля - данными из ассоциированного Address.Метод Doctrine2 findAll() не захватывает связанные данные?

Я делаю это, на мой взгляд код:

<?php foreach($instances as $instance) { ?> 
<?php $address = $instance->address; ?> 
    <tr> 
    <td><?php echo $instance->name; ?></td> 
    <td><?php echo $address->street; ?></td> 
    <td><?php echo $address->city; ?></td> 
    <td><?php echo $address->state; ?></td> 
    <td><?php echo $address->zip; ?></td> 
    </tr> 
<?php } ?> 

где $instances является каждая запись в таблице Manufacturers. Каждое свойство является общедоступным, но по какой-то причине Doctrine2 просто не потянет связанные данные Address вместе с вызовом findAll()Manufacturers. Что я делаю не так?

Это то, что я использую, чтобы захватить данные:

$instances = $this->doctrine->em->getRepository('Entities\Manufacturer')->findAll(); 

мне нужно каким-то образом указать доктрину, что я хочу, чтобы захватить связанные с ними данные, а также делать?

ответ

1

По умолчанию все ассоциации доктрин - ленивая загрузка. Doctrine использует прокси-объекты для обеспечения ленивой загрузки связанных данных. Для каждого поля получатели создаются в прокси-классе. Вам просто нужно вызвать получателей вместо прямого доступа к публичным свойствам. Рекомендуется объявлять все ваши поля частными в вашей организации и определять для них геттеры и сеттеры.

+1

Спасибо! На самом деле я нашел аналогичный вопрос и изменил свои классы соответственно, теперь он работает! – celestialorb

+1

Будьте осторожны с ленивой загрузкой. Несмотря на то, что с объектом легко справиться с объектом, возможно, вы выдаете несколько запросов. Я бы предложил сократить ваш журнал запросов и убедиться, что вы оптимизируете, уменьшив количество запросов, избегая ленивой загрузки и заставляя Doctrine вытаскивать все данные одновременно. –

+0

Nice аддон Майк. В большинстве случаев вы хотите определить связь oneToOne как нетерпеливую, потому что вы, вероятно, будете иметь дело с соответствующими данными. Таким образом вы будете выдать один запрос. –

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