Vue d'ensemble des tables de la base de données

Accès BDD

Utilisation des models et des collections

Fichier de configuration

Les informations de connexion sont dans /app/etc/local.xml Ce fichier ne doit pas être commité.

La connexion par défaut à MySQL se situe dans le noeud config > global > resources > default_setup > connection :

<?xml version="1.0"?>
<config>
    <global>
        <!-- (...) -->
        <resources>
            <!-- (...) -->
            <default_setup>
                <connection>
                    <host><![CDATA[localhost]]></host>
                    <username><![CDATA[magento]]></username>
                    <password><![CDATA[magento]]></password>
                    <dbname><![CDATA[magento]]></dbname>
                    <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
                    <model><![CDATA[mysql4]]></model>
                    <type><![CDATA[pdo_mysql]]></type>
                    <pdoType><![CDATA[]]></pdoType>
                    <active>1</active>
                </connection>
            </default_setup>
        </resources>
        <!-- (...) -->
    </global>
    <!-- (...) -->
</config>

Le chemin d'accès à l'administration :

<config>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[custom_admin]]></frontName>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

Sauvegarder les sessions utilisateurs sur le disque ou en BDD

<config>
    <global>
        <session_save><![CDATA[db]]></session_save> <!-- files|db -->
    </global>
</config>

Dans ce fichier, il est possible de configurer ces sessions pour les utiliser dans REDIS, voir le passage commenté sur Magento 1.9.*

Utilisation des models et des collections

Nous n'utilisons pas directement la BDD. Nous passons par les modèles déjà mis en place. L'ORM de Magento est très puissant.

Lecture d'un item

// Chargement
$object = Mage::getModel('module/object')->load($id);

// Afficher un champ
echo $object->getName();

// Affichage de tous les attributs/champs de notre objet
Mage::log($object->getData());

Le module et le model sont recherchés dans :

  • app/code/[core|community|local]/*/Module/Model/Object.php

Ainsi catalog/product peut dire app/code/core/Magento/Catalog/[Model|Block|Helper]/Product.php. Mais il pourrait très bien aussi dire `app/code/local/MyCompany/Catalog/[Model|Block|Helper]/Product.php.

Faites donc attention au nom de votre Namespace.

Requêtes SQL

La syntaxe des requêtes SQL se basent sur Zend Framework.

Il faut utiliser l'ORM de Magento. Cependant, certaines mécaniques comme les JOIN ou autre HAVING n'existent pas dans l'ORM. Vu que la requête est un objet Zend Db, il est tout à fait possible de se baser dessus.

Exemple Jointure :

$collection->getSelect()->joinLeft(
    // Quelle table sur la jointure
    array('customer_addess_table' => $tableName),

    // Condition de jointure
    'customer_addess_table.parent_id = main_table.customer_id AND column1 = column2',

    // Selection des champs de la table 2. Array avec une valeur vide équivaut à un SELECT *
    array('')
);

Exemple Having :

$collection->getSelect()->having($_cond);

Documentation Zend: http://framework.zend.com/manual/en/zend.db.select.html

Resource blog :