2010-11-29 26 views
0

Je dois effectuer une requête pour une collection d'envois de commande (Mage_Sales_Model_Mysql4_Order_Shipment_Collection). Je veux seulement voir l'envoi de la commande sur lequel un commentaire a été écrit qui correspond à un certain texte.Magento: Obtention d'une collection d'envois contenant uniquement des envois contenant un commentaire contenant un certain texte

Dans SQL non EAV, il ressemblerait à quelque chose comme ceci:

SELECT shipments.id 
FROM shipments 
JOIN comments ON (
    shipments.id = comments.shipment_id 
    AND comments.content IN('Possible comment', 'Another possible comment') 
    ) 
GROUP BY shipments.id 

Il est évident que je veux utiliser des méthodes de modèle natif de Magento pour l'accomplir:

$shipments = Mage::getResourceModel('sales/order_shipment_collection') 
    ->addAttributeToSelect('*') 
    // ?? 
    // ?? 
    ->load(); 

Est-ce possible?

Répondre

2

Pour garder les choses soignées, je mettrais ce qui suit dans mon propre modèle de ressource qui s'étend à Mage_Sales_Model_Mysql4_Order_Shipment_Collection.

public function addCommentsToFilter($comments = array()) 
{ 
    return $this->join('sales/shipment_comment', 'main_table.entity_id=parent_id', 'comment') 
     ->addFieldToFilter('comment', array('in'=>$comments)); 
} 

Ensuite, appelez avec:

$shipments = Mage::getResourceModel('mymodule/my_custom_collection') 
    ->addAttributeToSelect('*') 
    ->addCommentsToFilter(array('Possible comment', 'Another possible comment'));