Cómo hacer una consulta SQL con Magento
-
16-10-2019 - |
Pregunta
Esto es parte del módulo de blog AW. Tengo 2 tablas.
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
Tengo esa declaración SQL y estoy tratando de hacerlo con Magento Way:
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
Intenté algo así:
$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());
a partir de ese EnlacePero sin suerte. No hay modelo implementado para aw_blog_post_cat
mesa
Solución
No probé porque no tengo el módulo instalado en una instalación de Magento, pero verifiqué el código fuente y no estoy seguro de si es el último. Tiene en la colección de la clase de blog aw_blog_model_mysql4_blog_collection Un método que ayuda a filtrar el contenido en función de la ID de categoría
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;
}
Entonces puede usar en su código que:
$collection = Mage::getModel('blog/blog')->getCollection()
->addCatFilter(1);
$items = $collection->getItems();
Así que ahora obtienes todos los artículos de publicación.
Otros consejos
El blog FishPig tiene un excelente artículo sobre Escribir consultas personalizadas. Explica en detalle cómo obtener los recursos de consulta y los tablas.
En tu caso sería algo como esto
$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);