Certains l’oublient peut-être, mais Magento se base sur le framework Zend, qui nous propose beaucoup de fonctionnalités. Parmi celles-ci, le fait de pouvoir faire des requêtes SQL via des objets et des méthodes implémentées dans ce framework.

Faire un select

// On créé la connection
$connection = Mage::getSingleton('core/resource')->getConnection('read');
// On récupère la table voulue
$table = Mage::getSingleton('core/resource')->getTableName('NOM_DE_MA_TABLE');
// Ma variable sur laquelle filtrer
$entity_id = 1890;
$select = $connection->select()->from($table)->where('entity_id = ?', $entity_id);

$datas = $connection->fetchAll($select);
foreach($datas AS $data){
	// Ma variable $data contient un tableau avec comme clé la colonne de ma table, associée à sa valeur
}

Si vous souhaitez récupérer une seule valeur de votre requête, vous pouvez faire un fecthRow qui récupère tout de suite le premier élément (pratique si vous êtes sur de n’avoir qu’un seul élément dans votre select :

// On créé la connection
$connection = Mage::getSingleton('core/resource')->getConnection('read');
// On récupère la table voulue
$table = Mage::getSingleton('core/resource')->getTableName('NOM_DE_MA_TABLE');
// Ma variable sur laquelle filtrer
$entity_id = 1890;
$select = $connection->select()->from($table)->where('entity_id = ?', $entity_id);

$data = $connection->fetchRow($select);
// Ma variable $data contient un tableau avec comme clé la colonne de ma table, associée à sa valeur

Il est bien sûr possible de faire des jointures, des tris, des limites, nommer ses tables, ses colonnes, etc… Et pour voir tout ça, il y’a une page qui est très bien faire pour cela !

Voir la documentation de Zend_Db_Select

Faire un insert

Pour faire un insert, il suffit juste de créer un tableau de données, qui aura comme association le nom de la colonne dans la table, et la valeur (Notez que la connection se fait en « write » à partir d’ici) :

// On créé la connection
$connection = Mage::getSingleton('core/resource')->getConnection('write');
// On récupère la table voulue
$table = Mage::getSingleton('core/resource')->getTableName('NOM_DE_MA_TABLE');

// On construit notre tableau de données à insérer
// Mettez uniquement les données obligatoires que vous souhaitez renseigner, un auto_increment par exemple, sans être renseigné, se calculera tout seul

$datas = array(
    'first_column' => 'Ma valeur',
    'second_column' => 1,
);
$connection->beginTransaction();
// On insère les données dans la table
$connection->insert($table,$datas);

$connection->commit();

Faire un delete

Pour faire un delete, ce n’est pas plus compliqué que le reste, il faut définir une condition qui déterminera quels éléments doivent être supprimés :

// On créé la connection
$connection = Mage::getSingleton('core/resource')->getConnection('write');
// On récupère la table voulue
$table = Mage::getSingleton('core/resource')->getTableName('NOM_DE_MA_TABLE');

// On créé notre condition
$attributeId = 5;
$optionId = 90;
$condition = $connection->quoteInto('attribute_id=?', $attributeId);
$condition .= $connection->quoteInto(' AND option_id=?', $optionId);

$connection->beginTransaction();

// On supprime les données de la table
$connection->delete($table,$condition);

$connection->commit();

Faire un update

Dernière chose à voir ensemble, l’utilisation d’un update sur une table. Ici il nous faut :
– Des datas
– Une condition

Très simple, allons-y :

// On créé la connection
$connection = Mage::getSingleton('core/resource')->getConnection('write');
// On récupère la table voulue
$table = Mage::getSingleton('core/resource')->getTableName('NOM_DE_MA_TABLE');

// On créé notre condition
$attributeId = 5;
$condition = $connection->quoteInto('attribute_id=?', $attributeId);

// On créé nos données
$datas = array(
    'first_column' => 'Ma valeur',
    'second_column' => 1,
);


$connection->beginTransaction();

// On insère les données dans la table
$connection->update($table,$datas,$condition);

$connection->commit();

Et voilà ! Cet article est plus un aide-mémoire pour ceux qui sont tête en l’air comme moi, mais j’espère qu’il saura vous être utile ! Si vous avez des informations à ajouter, n’hésitez pas à m’en faire part par commentaire. Toute suggestion est la bienvenue 😉

Faire des requêtes avec Zend Db sans écrire de SQL
Taggé sur :                            

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok