Magento объединяет две таблицы с разными столбцами - PullRequest
2 голосов
/ 30 ноября 2011

Мне нужно изменить раздел adminhtml для уведомлений о наличии товара. обычно для одного продукта извлекается зарегистрированный клиент, подписавшийся на оповещения с помощью этой функции:

protected function _prepareCollection()
{
    $productId = $this->getRequest()->getParam('id');
    $websiteId = 0;
    if ($store = $this->getRequest()->getParam('store')) {
        $websiteId = Mage::app()->getStore($store)->getWebsiteId();
    }
    $collection = Mage::getModel('productalert/stock')
        ->getCustomerCollection()
        ->join($productId, $websiteId);
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

это (насколько я понимаю) сделать запрос к таблице product_alert_stock, которая имеет следующие столбцы:

alert_stock_id, customer_id, product_id, website_id, add_date, send_date, send_count, status  

, а затем объедините его с таблицей клиентов для получения имен клиентов.

Итак, мы создали аналогичную таблицу для гостевых пользователей (не зарегистрированных) product_alert_stock_guest со следующими столбцами:

alert_stock_id, guest_email, product_id, website_id, add_date, send_date, send_count, status

как вы можете видеть разницу, это столбец guest_email, который заменяет customer_id. возможно ли объединить (или сделать что-то похожее) эти две таблицы и затем отобразить их в одной сетке?

* 1014 спасибо *

Luca


@ JakeTheFish в конце я не сделал объединение, но я извлек объекты оповещений о гостевых запасах аналогично обычному оповещению о запасах, я установил поле электронной почты с помощью setData ('email', $ item-> getData ('email')), а затем я добавил их в коллекцию $ с помощью addItem. У меня ошибка: Mage :: exception ('Mage_Eav', 'Попытка добавить добавить недопустимый объект') когда я делаю логи на обычных товарах, у меня много информации: http://pastebin.com/z7NpNJrH вместо этого с пользовательскими пунктами оповещения о наличии на складе, у меня есть это: http://pastebin.com/KKcTeQEH так что проблема в том, что мне нужен экземпляр Mage_Customer_Model_Customer для добавления. я мог бы создать один, но:

1) я могу заполнить атрибуты этого экземпляра обычными методами как setField (сейчас я смотрю на API и ничего подобного не вижу)

2) даже если я могу заполнить атрибуты, что произойдет, если я установлю пустые поля?

1 Ответ

2 голосов
/ 30 ноября 2011

Magento предоставляет такие методы как:

joinAttribute
joinField
joinTable

Но объединенные таблицы должны иметь похожий идентификатор.

На основании этих 2 ссылок 1 и 2

Попробуйте что-то вроде этого:

$selectFoo = Mage::getResourceModel('model/foo')->getSelect();
$selectBar= Mage::getResourceModel('model/bar')->getSelect();
$mergedFooBar = $selectFoo->union(array($selectBar));

ИЛИ вы можете добавить элемент в коллекцию:

$collection->addItem($item);

НО, у вас есть 2 разных класса, и я не хочу, как они будут объединяться в одну коллекцию, я полагаю, если вы хотите объединить 2 разных объекта, вы должны сделать эти 2 подкласса некоторым третьим классом, который согласовывает разницу e-mail и customer_id.

...