Как подключиться к базе данных в Magento? - PullRequest
5 голосов
/ 25 апреля 2009

Я пытаюсь создать простой модуль Magento, который должен подключаться к базе данных в начале каждого запроса страницы. Все таблицы должны быть доступны для него. Я вырывал свои волосы, пытаясь понять, как это сделать. Лучшее, что я смог выяснить, это то, что мне нужно установить это в файле config.xml моего модуля, но какова именно эта команда / как ее можно использовать, я не смог выяснить.

Может кто-нибудь, пожалуйста, наставить меня или показать, как это сделать? Если нет, то будет ли плохой практикой включать пользовательский файл config.php, который подключается к базе данных вручную?

Ответы [ 2 ]

16 голосов
/ 27 апреля 2009

Вы пытаетесь использовать модель ресурса или сущность? вот как вы можете запросить таблицу, используя сырой SQL, но вам нужно знать имя таблицы.

$w = Mage::getSingleton('core/resource')->getConnection('core_write');
$result = $w->query('select entity_id from catalog_product_entity');

if (!$result) {
    return false;
}

$row = $result->fetch(PDO::FETCH_ASSOC);
if (!$row) {
    return false;
}

При попытке ко всем моделям вы можете использовать

$products = Mage::getModel('catalog/product')->getCollection();

$products->addAttributeToFilter('entity_id', array('in' => array(1,2)));

$products->addAttributeToSelect('*');
$products->load();

foreach ($products as $_prod) {
   var_dump($_prod->getData());
}

Я использую второй метод для своих пользовательских модулей, и он отлично сработал, надеюсь, этот ответ поможет:)

0 голосов
/ 08 августа 2009

А как насчет объектов, которые не имеют addAttributeToFilter? Я часами пытался загрузить объект роли по его имени, и ничего не работает. Единственный возможный метод - это загрузка, которая отлично работала бы, если бы не необъяснимое

if (!intval($value) && is_string($value)) {
   $field = 'role_id';
}

в Mage_Admin_Model_Mysql4_Role::load, что делает невозможным фильтрацию только по строковому значению.

Magento имеет Rube Goldberg архитектуру ...

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