Magento Присоединить коллекцию продуктов к пользовательской таблице на пользовательском атрибуте - PullRequest
3 голосов
/ 27 января 2012

Как в Magento можно объединить стандартную коллекцию продуктов с пользовательской таблицей в пользовательском атрибуте.

Так, например, у меня есть пользовательский атрибут продукта warehouse_id и пользовательский склад таблиц, и теперь я хочу коллекцию с именем продукта и именем хранилища.

Пример кода:

$collection = Mage::getModel('catalog/product')
    ->getCollection()
    ->joinAttribute('warehouse_id', 'warehouse/warehouse', 'warehouse_id', null, 'inner');
var_dump($collection);

Однако это не работает, так как склад является пользовательской таблицей / коллекцией и не находится в Таблица типа eav_entity_

Обдумав проблему, можно подумать:

$collection = Mage::getModel('warehouse/warehouse')->getCollection()->joinAttribute( etc.

Однако joinAttribute не является методом в моей пользовательской коллекции.

Прочитал каждый пример, каждый пост, пример вики и т. Д. И не может понять, как это сделать. Конкретный пример кода был бы идеальным.

1 Ответ

1 голос
/ 17 июля 2014

Я думаю, что joinAttribute мог бы работать, если некоторые параметры были изменены. Я немного больше знаком с join и joinLeft , которые больше похожи на работу напрямую с запросами mysql.

$collection = Mage::getModel('catalog/product')
    ->getCollection()->getSelect()
    ->joinLeft(array('warehouse_id'=>'warehouse'),'e.warehouse_id = warehouse_id.warehouse_id', array('name'));
var_dump($collection);

Предполагается, что имя вашей пользовательской таблицы warehouse и что поле в вашей пользовательской таблице, которое соответствует пользовательскому атрибуту warehouse_id, также называется warehouse_id. Это также предполагает, что поле для имени хранилища в вашей пользовательской таблице равно name. Возможно, вам придется сделать что-то подобное, а не называть таблицу напрямую:

$collection = Mage::getModel('catalog/product')
    ->getCollection()->getSelect()
    ->joinLeft(array('warehouse_id'=>$this->getTable('warehouse/warehouse')),'e.warehouse_id = warehouse_id.warehouse_id', array('name'));
var_dump($collection);

Если ни одна из них не работает, замените строку var_dump строкой:

echo $this->escapeHtml($collection->getSelect());

И опубликовать полученный SQL-запрос здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...