Hầu như tất cả các Mô hình Magento đều có đối tượng Bộ sưu tập tương ứng có thể được sử dụng để tìm nạp nhiều phiên bản của Mô hình.
Để tạo một bộ sưu tập sản phẩm, làm như sau
$collection = Mage::getModel('catalog/product')->getCollection();
Sản phẩm được một phong cách mẫu Magento EAV, vì vậy bạn sẽ cần phải thêm vào bất kỳ thuộc tính bổ sung mà bạn muốn quay trở lại.
$collection = Mage::getModel('catalog/product')->getCollection();
//fetch name and orig_price into data
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
Có nhiều cú pháp để đặt bộ lọc trên bộ sưu tập. Tôi luôn luôn sử dụng một trong những tiết dưới đây, nhưng bạn có thể muốn kiểm tra nguồn Magento cho những cách bổ sung các phương pháp lọc có thể được sử dụng.
Sau đây cho thấy làm thế nào để lọc theo một loạt các giá trị (lớn hơn và ít hơn)
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products whose orig_price is greater than (gt) 100
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','gt'=>'100'),
));
//AND filter for products whose orig_price is less than (lt) 130
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','lt'=>'130'),
));
Trong khi điều này sẽ lọc theo một cái tên đó bằng một điều này hay cách khác.
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
Một danh sách đầy đủ các điều kiện ngắn được hỗ trợ (eq, lt, vv) có thể được tìm thấy trong các phương pháp _getConditionSql
trong lib/Varien/Data/Collection/Db.php
Cuối cùng, tất cả các bộ sưu tập Magento có thể được lặp trên (lớp bộ sưu tập cơ sở thực hiện trên các giao diện trình lặp). Đây là cách bạn sẽ lấy sản phẩm của mình khi bộ lọc được đặt.
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('name'=>'orig_price','eq'=>'Widget A'),
array('name'=>'orig_price','eq'=>'Widget B'),
));
foreach ($collection as $product) {
//var_dump($product);
var_dump($product->getData());
}
câu trả lời rất chi tiết. cảm ơn! –
Cảm ơn bạn rất nhiều vì câu trả lời chi tiết. Bạn đã đặt tôi dọc theo con đường bên phải. Tôi đã thực hiện một var_dump kết quả từ mã ví dụ của bạn. Bởi vì thuộc tính tôi đang làm việc với một mục chọn nhiều, tôi nhận được một số id trong các kết quả nên so sánh văn bản không hoạt động. VÍ DỤ.$ this-> collection-> addFieldToFilter (mảng ( mảng ('thuộc tính' => 'cw_category', 'eq' => 'Aero'), mảng ('thuộc tính' => 'cw_category', 'eq' => 'Theo dõi'), mảng ('thuộc tính' => 'cw_category', 'eq' => 'Tham quan') )); Đang trả lại 'cw_category' => string ', 536,535,534' (length = 12) – Christian
Không thể giúp bạn một cách cụ thể mà không cần đào nhiều (StackOverflow rep là tốt, nhưng không thanh toán hóa đơn). Hai con đường để bạn theo đuổi. Đầu tiên, như đã đề cập, checkout _getConditionSql cho một danh sách tất cả các toán tử so sánh có thể. Thứ hai, nếu bạn kiểm tra PHPDoc cho phương thức addAttributeToFilter trên Mage_Eav_Model_Entity_Collection_Abstract, bạn sẽ thấy rằng một trong các giá trị kỳ vọng của tham số đầu tiên là một Mage_Eav_Model_Entity_Attribute_Interface. Điều đó có thể dẫn bạn vào con đường chính xác. –