11 Stimmen

Magento addFieldToFilter erlauben NULLs

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.

56voto

Kat Punkte 561

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...

26voto

Dane Punkte 251

Dies funktioniert für NOT NULL-Filter

$collection->addFieldToFilter('parent_item_id', array('notnull' => true));

19voto

leepowers Punkte 36580

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.

7voto

8qfx1ai5 Punkte 106

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)
));

2voto

Alireza Eliaderani Punkte 1953

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X