2009-11-20 21 views
10

Khi sử dụng phương pháp thu thập Magento addFieldToFilter có thể cho phép lọc theo giá trị NULL không? Tôi muốn chọn tất cả các sản phẩm trong bộ sưu tập có thuộc tính tùy chỉnh ngay cả khi không có giá trị nào được gán cho thuộc tính.Magento addFieldToFilter cho phép NULLs

Trả lời

1

Bạn không cần sử dụng addFieldToFilter.

nay là giải pháp:
thuộc tính tên được biết đến như code trong Magento, bạn chỉ cần sử dụng mã dưới đây để có được tất cả các sản phẩm trong đó có một thuộc tính cụ thể như một mảng

 

$prodsArray=Mage::getModel('catalog/product')->getCollection() 
            ->addAttributeToFilter('custom_attribute_code') 
            ->getItems(); 
 

bạn cũng có thể chỉ định các điều kiện nhất định cho giá trị của thuộc tính trong addAttributeToFilter trong tham số thứ hai của addAttributeToFilter.

bạn có thể tìm thấy phương pháp này trong tập tin này (nghiên cứu thêm):

app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php 
+0

Cảm ơn bạn đã chỉ ra addFieldToFilter - nó dẫn đến giải pháp xử lý NULL fie lds – leepowers

+0

điều này thực sự là sai, điều này sẽ làm một so sánh với trống '' hơn là một "là null" lọc. – useless

18

Lọc một bộ sưu tập sản phẩm bằng null/thuộc tính rỗng có hai giải pháp khả thi. Magento sử dụng INNER JOIN để lấy các giá trị của các thuộc tính để lọc. NHƯNG nếu thuộc tính sản phẩm không được chỉ định giá trị thì kết nối sẽ không thành công, vì bảng cơ sở dữ liệu/mối quan hệ bị thiếu.

Giải pháp # 1: Sử dụng addAttributeToFilter() và thay đổi kiểu tham gia từ "bên trong" (mặc định) để "left":

$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToFilter('custom_attribute', array(... condition options ..), 'left'); 

Giải pháp # 2: Hãy chắc chắn rằng thuộc tính tùy chỉnh của bạn có giá trị mặc định. Magento là bảo thủ trong lĩnh vực này. Magento sẽ chỉ tạo mối quan hệ giữa một thuộc tính và một sản phẩm nếu một giá trị được đưa ra cho thuộc tính. Vì vậy, trong trường hợp không có giá trị do người dùng chỉ định hoặc giá trị mặc định, thuộc tính sẽ không thể truy cập được để lọc sản phẩm ngay cả khi thuộc tính xuất hiện trong chế độ xem chi tiết sản phẩm trong bảng quản trị.

+3

chiến lược gia nhập trái làm việc tuyệt vời. Có vẻ như câu trả lời này khá cũ, nhưng tôi phải nói lời cảm ơn! – shaune

+1

Tham gia trái là phải khi thuộc tính grabbing, IMO. – Nick

49

Tôi thấy bạn đã tìm thấy một giải pháp, nhưng vẫn còn có tùy chọn này:

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

Nhưng nếu bạn muốn sử dụng "NULL" => sai, mà không hoạt động. (và tôi nhận thấy bạn có thể sử dụng các yếu tố như "trong", "nin", "eq", "NEQ", "gt"), bạn có thể làm điều này:

$collection->addFieldToFilter('parent_item_id', array('neq' => 'NULL')); 

Hy vọng điều này vẫn còn hữu ích. ..

+4

Xem tài liệu trong mã của Varien_Data_Collection_Db :: _ getConditionSql(). Nó mô tả tất cả các tùy chọn có thể, như đã đề cập 'null', nhưng cũng 'notnull' cho đảo ngược. – fietserwin

20

này làm việc cho KHÔNG lọc NULL

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

Bởi vì câu hỏi không phù hợp chính xác tiêu đề của câu hỏi và tôi thấy chúng nhiều lần bằng cách tìm kiếm một điều kiện như: giá trị đặc biệt HOẶC NULL

Nếu bạn muốn lọc bộ sưu tập phù hợp với VALUE HOẶC NULL, thì bạn có thể sử dụng:

$collection->addFieldToFilter('<attribute>', array(
    array('eq' => '<value>'), 
    array('null' => true) 
)); 
Các vấn đề liên quan