web-dev-qa-db-fra.com

Sélectionnez uniquement des champs spécifiques dans Magento

J'essaie d'utiliser la fonction MAX de MySQL pour récupérer les dernières dates de ma table.

$_updates = Mage::getModel('ticket/updates')->getCollection();  
$_updates->getSelect()->columns('MAX(created) as max_created')->group(array('status_id'));

Voici la requête résultante:

SELECT `main_table`.*, MAX(created) AS `max_created` FROM `em_ticket_updates` AS `main_table` GROUP BY `status_id` 

Le problème est que si tous les champs sont inclus (main_table.*) il ne fonctionne pas correctement.

Existe-t-il un moyen de supprimer main_table.* de la requête et utiliser uniquement des champs spécifiques?

Merci.

21
Jenny

Une astuce Zend peut être utilisée ici.

$_updates->getSelect()
    ->reset(Zend_Db_Select::COLUMNS)
    ->columns('MAX(created) as max_created')
    ->group(array('status_id'));

REMARQUE:

Pour la collecte EAV, vous devrez ajouter à nouveau le entity_id ou tu vas avoir une erreur lors du chargement de la collection

    $collection = Mage::getModel('catalog/product')
        ->getCollection();
    $collection->getSelect()
        ->reset(Zend_Db_Select::COLUMNS)
        ->columns(array('entity_id')); 

    $collection
        ->addAttributeToSelect(array('image','small_image','thumbnail'))
        ->addFieldToFilter('entity_id', array('in' => $simple_ids));
47
clockworkgeek

Magento fournit la fonctionnalité de addFieldToSelect (). Utilisez le code ci-dessous pour obtenir un champ spécifique.

$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');
6
Neeraj Garg

Je reconnais que c'est un ancien poste, mais je pensais publier une solution alternative.

J'ai eu un problème similaire moi-même, j'ai finalement cherché dans la source jusqu'à ce que j'atteigne Zend_Db_Select Après avoir consulté la Documentation Zend (Exemple 8).

$select = $db->select()
    ->from(array('p' => 'products'),
           array('product_id', 'product_name'));
5
ash