Comment faire requête SQL avec Magento
-
16-10-2019 - |
Question
Cela fait partie du module blog aw. J'ai 2 tables.
aw_blog
post_id | tags
1 tag1
2 tag2
3 tag3
aw_blog_post_cat
cat_id | post_id
1 1
1 3
2 3
J'ai cette déclaration SQL et je suis en train de le faire avec la manière magento:
SELECT `aw_blog`.`tags` FROM `aw_blog_post_cat` RIGHT JOIN `aw_blog` on `aw_blog`.`post_id`=`aw_blog_post_cat`.`post_id` WHERE `aw_blog_post_cat`.`cat_id`=1
J'ai essayé quelque chose comme ça:
$collection = Mage::getModel('blog/blog')->getCollection()
->getSelect()->joinRight(array("post_cat" => $this->getTable('aw_blog_post_cat')), 'main_table.post_id = post_cat.post_id', array());
à partir de ce lien
Mais sans succès.
Il existe pas de modèle mis en œuvre pour la table de aw_blog_post_cat
La solution
Je n'ai pas testé parce que je n'ai pas le module installé sur une installation Magento mais j'ai vérifié le code source et je ne suis pas sûr si elle est plus récente. Vous avez dans la collection de la classe Blog AW_Blog_Model_Mysql4_Blog_Collection une méthode qui permet de filtrer le contenu en fonction de l'identifiant de la catégorie
class AW_Blog_Model_Mysql4_Blog_Collection
...
public function addCatFilter($catId)
{
$this->getSelect()->join(
array('cat_table' => $this->getTable('post_cat')),
'main_table.post_id = cat_table.post_id',
array()
)
->where('cat_table.cat_id = ?', $catId);
return $this;
}
Ensuite, vous pouvez utiliser dans votre code:
$collection = Mage::getModel('blog/blog')->getCollection()
->addCatFilter(1);
$items = $collection->getItems();
Alors maintenant, vous obtenez tous les éléments de poste.
Autres conseils
Le blog Fishpig a un excellent article sur écrire des requêtes personnalisées . Il explique en détail comment obtenir les ressources de la requête et les noms de tables.
Dans votre cas, il serait quelque chose comme ceci
$resource = Mage::getSingleton('core/resource');
$read = $resource->getConnection('core_read');
$results = $read->fetchAll("SELECT * FROM {$resource->getTableName('blog/post_cat')}"); // change the query to your needs
var_dump($results);