Lọc bộ sưu tập danh mục tạo ra hành vi không chính xác với danh mục phẳng được bật


7

Tôi có một số mã để thực hiện tìm kiếm cơ bản của danh mục. Nó hoạt động bằng cách tìm kiếm tên danh mục và mô tả - các thuộc tính đều là cốt lõi.

Mã tôi có như sau:

$_categories = Mage::getModel('catalog/category')->getCollection()  
    ->addAttributeToSelect('name')
    ->addAttributeToSelect('description')
    ->addAttributeToSelect('associated_brand')
    ->addAttributeToSelect('image')
    ->setPageSize(12)
    ->setCurPage(1)
    ->addAttributeToFilter('level',['gt' => 2])
    ->addAttributeToFilter('is_active',['eq'=>true])
    ->addAttributeToFilter(
        [
            ['attribute' => 'name', 'like' => '%'.$searchterm.'%'],
            ['attribute' => 'description', 'like' => '%'.$searchterm.'%']
        ]
    )->load();

Trước khi bật danh mục phẳng cho các danh mục, nó đã trả về kết quả mong đợi - bất kỳ danh mục nào phù hợp với cụm từ tìm kiếm trong tên hoặc mô tả của chúng.

Với danh mục phẳng được bật, tìm kiếm tên hoặc mô tả không hoạt động. Nếu tôi xuất truy vấn bộ sưu tập cơ bản, nó như sau:

SELECT `main_table`.`entity_id`, `main_table`.`level`, `main_table`.`path`, `main_table`.`position`, `main_table`.`is_active`, `main_table`.`is_anchor`, `main_table`.`name`, `main_table`.`description`, `main_table`.`associated_brand`, `main_table`.`image` 
FROM `catalog_category_flat_store_1` AS `main_table` 
WHERE (level > 2) AND (is_active = '1')

Như có thể thấy ở trên, mệnh đề tên và mô tả bị thiếu hoàn toàn.

Tôi đã kiểm tra catalog_category_flat_store_1bảng đã tạo và các trường có mặt ở đó.

Bất kỳ ý tưởng tại sao Magento bỏ các bộ lọc này khỏi truy vấn, chỉ khi sử dụng danh mục phẳng?

Câu trả lời:


2

Trong \Mage_Catalog_Model_Resource_Category_Flat_Collection::addAttributeToFilter

public function addAttributeToFilter($attribute, $condition = null)
{
    if (!is_string($attribute) || $condition === null) {
        return $this;
    }

    return $this->addFieldToFilter($attribute, $condition);
}

Dường như không thể có một mảng trong tham số đầu tiên. Bạn cần lấy đối tượng Chọn và thực hiện truy vấn của mình theo cách thủ công khi căn hộ được bật.

Hy vọng điều này giúp đỡ,


Vì vậy, đây chỉ là một ví dụ khác trong đó việc triển khai danh mục phẳng không tương thích với giao diện EAV tiêu chuẩn?
BrynJ

không may là đúng vậy. Đây là một vấn đề lớn trong Thể loại. Khi tôi bắt đầu một dự án, tôi thường bắt đầu sử dụng căn hộ hoặc EAV nhưng không bao giờ thay đổi trong vòng đời dự án.
bchatard

Nếu bạn sử dụng addFieldToFilter()trực tiếp thay thế thì sao? Tôi không thấy lý do tại sao nó không hoạt động
Fabian Schmengler

Có, nó sẽ hoạt động, chỉ khi bạn luôn sử dụng căn hộ (không hoạt động trên EAV)
bchatard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.