DBIC Prefetch с несколькими записями работает, но выдает хэш-ошибку, есть ли способ это исправить?

Я пытаюсь ускорить свое приложение и играю с предварительной выборкой в ​​предварительной выборке DBIC.

у меня следующие отношения

  • Устройство имеет отношение «многие ко многим» с объектом (существует помощник отношения, который называется «device_has_objects»).

  • Объект принадлежит сети.

Я пытаюсь минимизировать количество обращений к БД. Следующее, кажется, работает

$self—>db->ResultSet(‘Object’)->search({}, 
          { prefetch => { device_has_objects => 'device' , 'network' }}  
          ); 

Но я получаю эту ошибку,

«Нечетное количество элементов в анонимном хеше»

Хотя SQL, который он генерирует, выглядит нормально.

SELECT me.objectid, me.description, me.objectname, me.objecttype, me.network_networkid,         network.networkid, network.network  
device_has_objects.device_deviceid, device_has_objects.object_objectid, device.devicename,   device.devicetype, device.deviceid 
FROM Object me 
LEFT JOIN network network ON network.networkid = me.network_networkid 
LEFT JOIN Device_has_Object device_has_objects ON device_has_objects.object_objectid = me.objectid 
LEFT JOIN Device device ON device.deviceid = device_has_objects.device_deviceid;

Целью поиска является возврат объектов, принадлежащих к определенным сетям, а также предоставление устройств, на которых существует объект.

Есть ли способ избежать этой ошибки?


person user1768233    schedule 07.09.2014    source источник


Ответы (1)


хорошо, я чувствую себя глупо,

Мне пришлось пройти и массив для предварительной выборки

prefetch => [ { device_has_objects => 'device' } , 'network' ]

это работает нормально и не вызывает ошибки.

person user1768233    schedule 07.09.2014
comment
Я рад, что вы нашли решение. Могу ли я попросить вас также отметить свой ответ как принятый, чтобы другие могли видеть, что вопрос имеет решение? - person Borodin; 08.09.2014
comment
Мне нужно подождать 2 дня, чтобы отметить свой ответ как принятый в соответствии с системой. Я должен быть в состоянии обновить его завтра - person user1768233; 08.09.2014