Come rendere query SQL con Magento
-
16-10-2019 - |
Domanda
Questa è parte del modulo blog aw. Ho 2 tabelle.
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
Non ho che istruzione SQL e sto cercando di farlo con modo 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
ho provato qualcosa di simile:
$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());
link
Ma senza fortuna.
Non esiste un modello implementato per la tabella aw_blog_post_cat
Soluzione
non ho la prova, perché non ho il modulo installato su un'installazione di Magento, ma ho controllato il codice sorgente e non sono sicuro se è più recente. Avete nella collezione del blog di classe AW_Blog_Model_Mysql4_Blog_Collection un metodo che aiuta a filtrare i contenuti in base alla categoria id
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;
}
Quindi è possibile utilizzare nel codice che:
$collection = Mage::getModel('blog/blog')->getCollection()
->addCatFilter(1);
$items = $collection->getItems();
Così ora ottenere tutti gli elementi postali.
Altri suggerimenti
Il blog Fishpig ha un eccellente articolo su scrivere query personalizzate . Esso spiega in dettaglio come ottenere le risorse di query e tablenames.
Nel tuo caso, sarebbe qualcosa di simile
$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);