Consulta de filtro de atributos de lista de productos

12

He agregado un filtro en Método _getProductCollection() de la clase de la Mage_Catalog_Block_Product_List siguiente manera.

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection->getSelect()->joinInner(
        array('cpe' => 'catalog_product_entity'),
        'e.entity_id = cpe.entity_id'
    ) 
    ->where("cpe.type_id = 'simple'"); 
    ...
}

El código anterior funciona bien a partir de la versión 1.7 de Magento. Pero cada vez que escribo el siguiente código, me da

Columna no encontrada: 1054 Columna desconocida 'e.type_id' en 'cláusula where'

error.

El código (que no funciona).

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
        ->addAttributeToSelect('type_id')
        ->addAttributeToFilter('type_id','simple');
    ...
}

Ahora las preguntas .

  1. ¿Habrá algún impacto en el rendimiento si uso el primer código de trabajo?
  2. ¿Hay alguna otra forma de obtener un filtro de producto adecuado?

ACTUALIZAR:

Cada vez que aplico el siguiente código y uso el rwdtema, no recibo ningún error. Pero cada vez que uso el defaulttema, aparece el siguiente error,

Código

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
         ->addAttributeToSelect('type_id')
         ->addAttributeToFilter('type_id','simple');
    ...
}

Error

SQLSTATE [42S22]: columna no encontrada: 1054 Columna desconocida 'e.type_id' en 'cláusula where', la consulta fue: SELECCIONAR PISO ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS range, CONTAR (*) countDESDE catalog_product_index_priceCOMO e UNIRSE INTERNA catalog_category_product_indexCOMO cat_indexEN cat_index.product_id = e.entity_id AND cat_index.store_id = 1 AND cat_index.visibility IN (2, 4) AND cat_index.category_id = '3' WHERE ( e. type_idIN ('simple' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) AND (e.min_price IS NOT NULL) GROUP BY FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ORDEN POR PISO ((REDONDO ((e.min_price) * 1, 2)) / 10) + 1 ASC

Magento Learner
fuente
¿Qué versión de magento has usado? * y he aplicado parches magento
Amit Bera
1
wtf? ahora tiene sentido ... estaba probando un EE 1.14 en RWD, eso es simplemente inaceptable, ¿cómo puede un tema de vista cambiar una consulta completa? Peor aún, ¿cómo puede cambiar la tabla principal? Esto no podría ser más que un error . ¡Bien hecho @Magento Learner!
MauroNigrele
Exactamente, el tema de la vista crea un problema. Gracias. El código debe ser independiente de un tema
Magento Learner

Respuestas:

0

Creo que:

$collection->addAttributeToFilter('type_id', array('eq' => 'simple');

En caso funciona, no es necesario añadir type_idque selectya es una catalog_product_entitycolumna y se recuperó de forma predeterminada. Siempre sugiero registrar la consulta final para tener una mejor idea de lo que sucede:

Mage.:log($collection->getSelectSql(true));

Por cierto: el primer bloque de código no tiene ningún sentido ya que está uniendo la tabla principal ( catalog_product_entity) a sí mismo.

MauroNigrele
fuente
"en Magento 1.7 hicieron una optimización en el sql seleccionado que se usa para las opciones de filtrado de precios. Quitan la parte FROM sql (que es la entidad del producto - que contiene el atributo type_id) y hacen que la tabla relacionada price_index sea la principal - la que se usa en la parte FROM de la consulta. Entonces, básicamente, la tabla de la que se seleccionan los datos ya no es la tabla de entidad del producto (se pierden todos los atributos base de los productos), la tabla principal se convierte en el índice del producto. Esta es una actualización central que el equipo de Magento agregó versiones iniciales 1.7 ". Consulte lo siguiente
Magento Learner
1
Wooow mi culpa, por alguna razón, estaba pensando en el método getCollection del bloque de fondo, por lo que en este escenario su primer código está bien, no estoy seguro de si es la mejor solución, pero parece estar bien. Lo sentimos
MauroNigrele
@MagentoLearner, ¿estás seguro de esa publicación? Acabo de volver a verificar en un EE1.14 que instalé y todavía uso catalog_product_entity como tabla principal, excepto cuando configuró para usar el catálogo plano (absolutamente recomendado) pero en ambos casos tiene type_id presente en la selección. ¿Puedes registrar la consulta como escribí en la respuesta original?
MauroNigrele
1
mmmm interesante ... También compruebo la consulta en un caso de búsqueda y está usando catalog_product_entity como tabla principal, tal vez el "equipo de magento" ha decidido revertir los cambios. No puedo encontrar ningún 1.7 instalado para verificarlo, pero la idea de cambiar la tabla principal de una entidad parece una muy mala decisión arquitectónica ... Bueno, tenga en cuenta que acaba de arruinar mi fin de semana, ahora necesito encontrar e instalar un CE1 .7 y mira esta mierda con mis propios ojos ... mi esposa no estará contenta con esto :)
MauroNigrele