Wenn Sie die Magento Sammlung Methode addFieldToFilter ist es möglich, die Filterung von NULL-Werte zu ermöglichen? Ich möchte alle Produkte in einer Sammlung auswählen, die ein benutzerdefiniertes Attribut haben, auch wenn dem Attribut kein Wert zugewiesen ist.
Antworten
Zu viele Anzeigen?Wie ich sehe, haben Sie bereits eine Lösung gefunden, aber es gibt auch diese Möglichkeit:
$collection->addFieldToFilter('parent_item_id', array('null' => true));
Aber wenn Sie "NULL" => false verwenden wollen, was nicht funktioniert. (und ich habe festgestellt, dass Sie Elemente wie "in", "nin", "eq", "neq", "gt" verwenden können), können Sie dies tun:
$collection->addFieldToFilter('parent_item_id', array('neq' => 'NULL' ));
Ich hoffe, das ist noch hilfreich...
Für das Filtern einer Produktsammlung nach null/leeren Attributen gibt es zwei mögliche Lösungen. Magento verwendet einen INNER JOIN, um die Werte der zu filternden Attribute zu erfassen. Wenn dem Produktattribut jedoch kein Wert zugewiesen ist, schlägt die Verknüpfung fehl, da eine Datenbanktabelle/Beziehung fehlt.
Lösung #1: Verwenden Sie addAttributeToFilter() und ändern Sie den Verknüpfungstyp von "inner" (Standard) auf "left":
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('custom_attribute', array( ... condition options ..), 'left');
Lösung #2: Stellen Sie sicher, dass Ihr benutzerdefiniertes Attribut einen Standardwert hat. Magento ist in dieser Hinsicht konservativ. Magento stellt die Beziehung zwischen einem Attribut und einem Produkt nur her, wenn ein Wert für das Attribut angegeben wird. Wenn also kein benutzerdefinierter Wert oder ein Standardwert vorhanden ist, kann das Attribut nicht für die Filterung eines Produkts verwendet werden. auch wenn das Attribut in der Produktdetailansicht im Verwaltungsbereich erscheint.
Weil die Frage nicht genau mit dem Titel der Frage übereinstimmt und ich sie mehrfach gefunden habe, indem ich nach einer Bedingung wie: special VALUE OR NULL gesucht habe
Wenn Sie eine Sammlung filtern wollen, die mit einem VALUE OR NULL übereinstimmt, dann können Sie verwenden:
$collection->addFieldToFilter('<attribute>', array(
array('eq' => '<value>'),
array('null' => true)
));
Sie brauchen nicht zu verwenden addFieldToFilter
.
jetzt die Lösung:
Der Name der Attribute ist bekannt als code
in magento müssen Sie nur den folgenden Code verwenden, um alle Produkte, die ein bestimmtes Attribut haben, als Array zu erhalten
$prodsArray=Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('custom_attribute_code')
->getItems();
können Sie auch bestimmte Bedingungen für den Wert des Attributs in addAttributeToFilter
im zweiten Parameter von addAttributeToFilter.
finden Sie diese Methode in dieser Datei (zum weiteren Studium):
app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php