การสืบค้นข้อมูลคุณลักษณะรายการสินค้า


12

ฉันได้เพิ่มหนึ่งตัวกรองในวิธี_getProductCollection() การเรียนMage_Catalog_Block_Product_List ดังต่อไปนี้

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection->getSelect()->joinInner(
        array('cpe' => 'catalog_product_entity'),
        'e.entity_id = cpe.entity_id'
    ) 
    ->where("cpe.type_id = 'simple'"); 
    ...
}

โค้ดด้านบนนี้ใช้งานได้ดีตั้งแต่ Magento เวอร์ชั่น 1.7 แต่เมื่อใดก็ตามที่ฉันเขียนโค้ดต่อไปนี้มันจะให้

ไม่พบคอลัมน์: 1054 คอลัมน์ที่ไม่รู้จัก 'e.type_id' ใน 'where clause'

ความผิดพลาด

รหัส (ซึ่งไม่ทำงาน)

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
        ->addAttributeToSelect('type_id')
        ->addAttributeToFilter('type_id','simple');
    ...
}

ตอนนี้คำถาม

  1. จะมีผลกระทบต่อประสิทธิภาพหรือไม่หากฉันใช้รหัสการทำงานแรก
  2. มีวิธีอื่นอีกไหมที่จะหลีกเลี่ยงให้มีตัวกรองผลิตภัณฑ์ที่เหมาะสม?

UPDATE:

เมื่อใดก็ตามที่ฉันใช้รหัสต่อไปนี้และใช้rwdชุดรูปแบบฉันไม่ได้รับข้อผิดพลาดใด ๆ แต่เมื่อใดก็ตามที่ฉันใช้defaultธีมฉันได้รับข้อผิดพลาดด้านล่าง

รหัส

protected function _getProductCollection()
{
     ...
    $this->_productCollection = $layer->getProductCollection();
    $this->_productCollection
         ->addAttributeToSelect('type_id')
         ->addAttributeToFilter('type_id','simple');
    ...
}

ความผิดพลาด

SQLSTATE [42S22]: ไม่พบคอลัมน์: 1054 คอลัมน์ที่ไม่รู้จัก 'e.type_id' ใน 'where clause', การสืบค้นคือ: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS range, COUNT (*) AS countจาก catalog_product_index_priceAS e INNER JOIN catalog_category_product_indexAS cat_indexON cat_index.product_id = e.entity_id และ cat_index.store_id = 1 และ cat_index.visibility ใน (2, 4) และ cat_index.category_id = '3' WHERE ( e. type_idIN ( 'ง่าย' )) และ (e.website_id = '1') และ (e.customer_group_id = 0) และ (e.min_price ไม่เป็นโมฆะ) กลุ่มตามพื้น ((รอบ (e.min_price) * 1, 2)) / 10) + 1 ORDER BY FLOOR ((รอบ ((e.min_price) * 1, 2)) / 10) + 1 ASC


วีโอไอพีเวอร์ชั่นไหนที่ใช้? * & ได้ใช้แผ่นแปะ Magento
Amit Bera

1
WTF? ตอนนี้มีเหตุผล ... ฉันลองใช้ EE 1.14 ใน RWD นั่นเป็นเรื่องที่ยอมรับไม่ได้ชุดรูปแบบมุมมองจะเปลี่ยนคำถามทั้งหมดได้อย่างไรและแย่ที่สุดวิธีเปลี่ยนตารางหลัก ... นี่ไม่น่าจะเป็นปัญหาอะไร . ทำได้ดีมาก @Magento ผู้เรียน!
MauroNigrele

ชุดรูปแบบมุมมองสร้างปัญหา ขอบคุณ รหัสควรเป็นอิสระจากชุดรูปแบบ
Magento Learner

คำตอบ:


0

ฉันคิดว่า:

$collection->addAttributeToFilter('type_id', array('eq' => 'simple');

น่าจะใช้งานได้คุณไม่จำเป็นต้องเพิ่มลงtype_idไปselectเนื่องจากเป็นcatalog_product_entityคอลัมน์และมันจะถูกดึงมาโดยค่าเริ่มต้น ฉันมักจะแนะนำให้บันทึกคำถามสุดท้ายเพื่อให้ได้แนวคิดที่ดีที่สุดว่าเกิดอะไรขึ้น:

Mage.:log($collection->getSelectSql(true));

BTW: บล็อกโค้ดแรกไม่มีความหมายเลยตั้งแต่คุณเข้าร่วมตารางหลัก( catalog_product_entity)กับตัวมันเอง


"ใน Magento 1.7 พวกเขาได้ทำการปรับให้เหมาะสมกับ sql select ที่ใช้สำหรับตัวเลือกการกรองราคาพวกเขาลบส่วน FROM sql (ซึ่งเป็นเอนทิตีผลิตภัณฑ์ - ซึ่งมีแอตทริบิวต์ type_id) และทำให้ตาราง price_index สัมพันธ์กัน ที่ใช้ในส่วน FROM ของเคียวรีดังนั้นโดยทั่วไปตารางที่เลือกข้อมูลไม่ใช่ตารางเอนทิตีผลิตภัณฑ์อีกต่อไป (คุณสูญเสียแอตทริบิวต์ฐานผลิตภัณฑ์ทั้งหมด) ตารางหลักกลายเป็นดัชนีผลิตภัณฑ์นี่คือการอัปเดตหลักที่ ทีม Magento ได้เพิ่ม 1.7 รุ่นขึ้นไป " อ้างถึงสิ่งต่อไปนี้
Magento Learner


1
ฉันคิดว่าในวิธีการ getCollection ของ backend block ดังนั้นในสถานการณ์นี้โค้ดแรกของคุณมันก็โอเคฉันไม่แน่ใจว่ามันเป็นทางออกที่ดีที่สุด แต่ดูเหมือนว่าจะโอเค ขออภัย
MauroNigrele

@MagentoLearner คุณแน่ใจเกี่ยวกับโพสต์นั้นหรือไม่ ฉันเพิ่งตรวจสอบอีกครั้งบน EE1.14 ฉันได้ติดตั้งและยังคงใช้ catalog_product_entity เป็นตารางหลักยกเว้นเมื่อคุณตั้งให้ใช้แค็ตตาล็อกแบบแบน (แนะนำอย่างยิ่ง) แต่ในทั้งสองกรณีคุณมี type_id อยู่ในตัวเลือก คุณสามารถบันทึกแบบสอบถามตามที่ฉันเขียนไว้ในคำตอบเดิมได้หรือไม่
MauroNigrele

1
mmmm น่าสนใจ ... ฉันตรวจสอบข้อความค้นหาในกรณีการค้นหาและใช้ catalog_product_entity เป็นตารางหลักบางที "ทีมวีโอไอพี" อาจตัดสินใจย้อนการเปลี่ยนแปลงนั้น ฉันไม่พบ 1.7 ติดตั้งเพื่อตรวจสอบ แต่ความคิดในการเปลี่ยนตารางหลักของเอนทิตีดูเหมือนการตัดสินใจทางสถาปัตยกรรมที่แย่มาก ... โปรดทราบว่าคุณเพิ่งทำลายวันหยุดสุดสัปดาห์ของฉันตอนนี้ฉันต้องค้นหาและติดตั้ง CE1 0.7 และมองอึนี้ด้วยตาของตัวเอง ... ภรรยาของฉันจะไม่ได้มีความสุขกับนี้ :)
MauroNigrele
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.