คำถามติดแท็ก collection

คำถามที่เกี่ยวข้องกับการสะสมวีโอไอพี

3
Magento 1: การปรับปรุงประสิทธิภาพเพื่อลบเอนทิตี
ฉันกำลังพยายามปรับปรุงสองโมดูลเกี่ยวกับประสิทธิภาพ บางท่านอาจรู้จักการใช้walk()วิธีการในการรวบรวมซึ่งมีประโยชน์มากในการหลีกเลี่ยงการวนซ้ำผ่านผลิตภัณฑ์โดยตรง ยิ่งไปกว่านั้นและขอบคุณ @Vinai เราสามารถใช้delete()วิธีการรวบรวมได้เช่นกัน แต่ฉันสังเกตเห็นว่าไฟล์ดั้งเดิมของ Magento 1 ไม่ได้ใช้วิธีการใด ๆ ในการลบ หนึ่งในรหัสที่เลวร้ายที่สุดที่ผมเคยเห็นเป็นmassDelete()วิธีการจากการapp/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.phpที่ผลิตภัณฑ์จะถูกโหลดในวงก่อนที่จะลบ foreach ($productIds as $productId) { $product = Mage::getSingleton('catalog/product')->load($productId); Mage::dispatchEvent('catalog_controller_product_delete', array('product' => $product)); $product->delete(); } ดังนั้นฉันจึงทำการทดสอบประสิทธิภาพเพิ่มการเรียกการบันทึกเพื่อตรวจสอบเวลาที่ใช้และการใช้หน่วยความจำสำหรับการลบผลิตภัณฑ์ 100 รายการ ทดสอบ 1: walkวิธีการ ฉันแทนที่รหัสเดิมที่วางไว้ด้านบนด้วยรหัสนี้: $collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('entity_id') ->addIdFilter($productIds) ->walk('delete'); และผลลัพธ์ของฉันมีดังต่อไปนี้บนเซิร์ฟเวอร์ dev ของฉันเส็งเคร็ง (โดยเฉลี่ยจากการทดสอบ 10 ครั้ง): รหัสเดิม: 19.97 วินาทีใช้ 15.84MB รหัสที่กำหนดเอง: …

2
Magento 2: การรวบรวมผลิตภัณฑ์กรองตามหลายหมวดหมู่ (Magento 2.1)
ฉันใช้Magento 2.1.0และตอนนี้ฉันมีปัญหาในการกรองชุดผลิตภัณฑ์ที่มีหลายหมวดหมู่ ฉันใช้มากกว่าสองวิธีในการทำให้มันใช้งานได้ แต่ก็ไม่เป็นเช่นนั้น สมมติว่า: $catalog_ids = [618, 619, 620]; ส่งคืน NULL $productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids)); ส่งคืนข้อยกเว้น: ชื่อแอตทริบิวต์ไม่ถูกต้อง: category_id $productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids )); ส่งคืนข้อผิดพลาดทางไวยากรณ์หรือการละเมิดการเข้าถึง $productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids )); คำแนะนำใด ๆ เกี่ยวกับวิธีที่ฉันสามารถมีงานนี้หรือมีบางสิ่งบางอย่างเชื่อมโยงงานนี้

2
กรองการรวบรวมผลิตภัณฑ์ตามคุณลักษณะผลิตภัณฑ์ย่อย
ฉันมีสถานการณ์เช่น 2 คุณลักษณะซึ่งกำหนดให้กับผลิตภัณฑ์เด็ก 1) person_height_fromและ 2) person_height_toซึ่งมีแอตทริบิวต์ประเภทDropDown ซึ่งกำหนดให้เฉพาะในผลิตภัณฑ์สำหรับเด็ก แต่ไม่ได้กำหนดในผลิตภัณฑ์หลัก ฉันต้องการกรองชุดผลิตภัณฑ์ในหน้าหมวดหมู่ด้วยแอตทริบิวต์นี้ ชอบ length = 175 $collection->addAttributeToFilter('person_height_from', array('lteq' => $length)); $collection->addAttributeToFilter('person_height_to', array('gteq' => $length)); เป็นไปได้ไหมที่จะรับเฉพาะผลิตภัณฑ์แม่ในหน้าหมวดหมู่ที่ผลิตภัณฑ์ย่อยกำหนดค่าไว้ด้านบน ความช่วยเหลือของคุณจะได้รับการชื่นชม

6
magento 2: วิธีการใช้คำสั่งโดยและ จำกัด ข้อในแบบสอบถาม SQL
ฉันใช้รหัสต่อไปนี้เพื่อกรองผลลัพธ์และฉันต้องการ จำกัด ผลลัพธ์ $giftColletion = $this->_giftFactory->getCollection(); $giftColletion->addFieldToFilter('store_id', 1); $giftColletion->setOrder('position','ASC');

1
addExpressionFieldToSelect คืออะไรการใช้งานมากกว่า addFieldToSelect?
ฉันกำลังศึกษาวีโอไอพีและฉันไม่เข้าใจว่าการใช้addExpressionFieldToSelectเกินความจริงaddFieldToSelectคืออะไร? ฉันไม่พบคำตอบที่ใดก็ได้ในการอ่านของฉัน เท่าที่ฉันสามารถบอกได้ดูเหมือนว่าจะเขียนชื่อฟิลด์ใหม่ แต่ถ้าคุณส่งผ่านอาเรย์ด้วยการเขียนซ้ำ ทำไมคุณไม่สามารถทำสิ่งนี้กับ addFieldToSelect ตั้งแต่แรกถ้าคุณรู้ว่าฟิลด์ควรเขียนใหม่เป็นอย่างไร

2
Magento Filter โดยการสร้างเวลา (วันนี้, เมื่อวาน, สัปดาห์, ชั่วโมง ฯลฯ )
ฉันมีคอลเลกชันที่กำหนดเองที่ฉันต้องการกรองตามวันที่สร้างและรายการ het ที่สร้างขึ้นเมื่อวาน รายการสะสม //dates are set in controller using setCreatedTime(Mage::getModel('core/date')->gmtDate()); สร้างเมื่อวาน (ไม่ทำงาน) //3 products items Yesterday //below filtering outputs incorrect entries $collection = Mage::getModel('things/things')->getCollection(); ฉันได้ลองแล้ว แต่ให้ผลลัพธ์ที่ไม่ถูกต้อง //thought strtotime('yesterday') would work.. $collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('yesterday')))); $collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('-1 day')))); $collection->addFieldToFilter('created_time', array('from'=> strtotime('-1 day', time()),'to'=> time(),'datetime' …

1
วิธีที่ดีที่สุดในการตรวจสอบว่ามีแอตทริบิวต์ที่กำหนดเองอยู่ใน Magento2
ในการระวังฉันต้องการตรวจสอบว่ามีแอตทริบิวต์ที่กำหนดเองของฉันอยู่ก่อนที่ฉันจะพยายามใช้มันในทางใดทางหนึ่งหรือไม่ ฉันต้องตรวจสอบกับทุก ๆ การรวบรวมคุณสมบัติไม่ใช่เฉพาะการรวบรวมผลิตภัณฑ์ แอตทริบิวต์ของฉันอาจมีอยู่ในลูกค้าผลิตภัณฑ์หรือในรูปแบบที่กำหนดเองของการสร้างของฉันเอง ใน magento 1.x ฉันจะใช้สิ่งต่อไปนี้: $attr = Mage::getResourceModel('eav/entity_attribute_collection')->setCodeFilter('specialty')->getFirstItem(); if ($attr->getAttributeId() > 0) { Do some stuff....' ฉันไม่พบสิ่งใดที่ทำสิ่งนี้อย่างชัดเจน

2
ปัญหาการรวบรวมสินค้า - ข้อมูลการกำหนดราคาไม่ถูกต้องหรือไม่แสดงสินค้าหมด
ฉันกำลังรับชุดผลิตภัณฑ์ตามหมวดหมู่ปัจจุบัน ฉันต้องการชุดสะสมนี้ที่มีทั้งในและนอกสต็อกสินค้าและฉันยังต้องการข้อมูลการกำหนดราคาที่จะแสดงอย่างถูกต้อง ร้านค้าของฉันได้รับการกำหนดค่าให้จัดเก็บการกำหนดราคาผลิตภัณฑ์รวมภาษีและแสดงราคาทั้งแบบรวมและแบบเอกสิทธิ์เฉพาะบุคคลที่หน้าร้าน รหัสสำหรับรับคอลเล็กชันมีดังนี้: $category = Mage::registry('current_category'); $_productCollection = Mage::getModel('catalog/product')->getCollection() ->addCategoryFilter($category) ->addAttributeToSelect(['sku', 'name', 'price']) ->addAttributeToFilter('status', 1) ->addAttributeToSort('jump_number', Varien_Data_Collection::SORT_ORDER_ASC); ปัญหาข้างต้นคือเมื่อโหลดบล็อกราคาโดยใช้getPriceHtml()วิธีราคาทั้งแบบรวมและแบบเอกสิทธิ์จะแสดงเป็นราคาแบบรวม หลังจากการวิจัยบางอย่างฉันพบว่าการเพิ่มaddFinalPrice()วิธีการในการเก็บรวบรวมของฉันทำให้ฉันคาดหวังการกำหนดราคา - ราคารวมพิเศษที่ถูกต้องและถูกต้อง อย่างไรก็ตามหากฉันรวมaddFinalPrice()วิธีการไว้ด้วยแล้วคอลเล็กชันของฉันจะไม่มีสินค้าหมดอีกต่อไป มีวิธีการส่งคืนข้อมูลการกำหนดราคาที่ถูกต้องและการรวบรวมมีทั้งที่ขายได้และหมดสินค้าหรือไม่

4
วิธีการรับสินค้าหมดรายการ - ตรงข้าม addInStockFilterToCollection ()
ฉันมีความต้องการที่จะแสดงผลิตภัณฑ์ของหมวดหมู่ในสองรายการ - หนึ่งสำหรับในรายการสต็อก, อื่น ๆ สำหรับรายการหมด ฉันกำลังใช้ Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection() เพื่อกรองคอลเลกชันผลิตภัณฑ์ของฉันสำหรับรายการในสต็อก แต่ดูเหมือนจะไม่มีวิธีที่เทียบเท่าในการกรองสำหรับรายการที่หมด - ฉันได้ดูMage_CatalogInventory_Model_Stockแบบจำลองซึ่งเป็นที่ที่กำหนดวิธีการดังกล่าวข้างต้น ฉันได้เห็นตัวอย่างต่อไปนี้สำหรับการดึงสินค้าออกจากสต็อก: $collection->joinField( 'is_in_stock', 'cataloginventory/stock_item', 'is_in_stock', 'product_id=entity_id', '{{table}}.stock_id=1', 'left' ) ->addAttributeToFilter('is_in_stock', array('eq' => 0)); ... แต่แน่นอนว่านี่ไม่ใช่เพียงหรือวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้?

4
โหลดการรวบรวมผลิตภัณฑ์อย่างง่าย (ทั้งในสต็อกและหมด)
ฉันประสบปัญหาในการโหลดผลิตภัณฑ์ "เด็ก" ทั้งหมดของผลิตภัณฑ์ที่กำหนดค่าได้ลงในคอลเล็กชันแม้กระทั่งสินค้าที่หมด ชอบโหลดผลิตภัณฑ์เช่นนี้: $simpleCollection = $configurable->getUsedProductCollection() ->addAttributeToSelect('*') ->addFilterByRequiredOptions(); foreach ($simpleCollection as $simple) { //$simple->getName(); } จะไม่สนใจผลิตภัณฑ์สำหรับเด็กที่ไม่มีในสต็อกอาจเป็นเพราะพวกเขาไม่ได้อยู่ในตารางราคาที่เข้าร่วม มีตัวเลือกอื่นโดยไม่ต้องโหลดรหัสเด็กทั้งหมดโดยgetChildrenIdsแล้วโหลดผลิตภัณฑ์ง่าย ๆ พร้อมโหลดหรือไม่

2
การแบ่งเลขกริดไม่ทำงานเมื่อใช้ส่วนคำสั่งกลุ่มในการรวบรวม
ฉันกำลังทำงานกับตารางผลิตภัณฑ์ แต่การแบ่งหน้าหรือจำนวนผลิตภัณฑ์ไม่ทำงาน (เนื่องจากแสดงจำนวนผิด) เนื่องจากฟังก์ชั่นบล็อกของฉัน _preparecollection มีดังต่อไปนี้ฉันได้เพิ่มรหัสตัวกรองหมวดหมู่ในคอลเลกชันดังนั้นฉันต้องใช้ส่วนคำสั่งกลุ่มเพื่อป้องกันข้อผิดพลาดสำหรับรหัสเดียวกันที่มีอยู่แล้ว protected function _prepareCollection() { $store = $this->_getStore(); $collection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('sku') ->addAttributeToSelect('name') ->addAttributeToSelect('attribute_set_id') ->addAttributeToSelect('type_id') ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id=entity_id', null, 'left'); $collection->addAttributeToFilter('category_id', array('in' => array(4,10))) ->distinct(true); $collection->getSelect()->group('e.entity_id'); if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory')) { $collection->joinField('qty', 'cataloginventory/stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'); } $collection->joinField('position', 'catalog/category_product', 'position', 'product_id=entity_id', null, 'left'); $collection->joinField('websites', 'catalog/product_website', …

1
วิธีแสดงรายการผู้ใช้ทั้งหมด
เป็นส่วนหนึ่งของแบบฝึกหัดฉันพยายามแสดงรายการอีเมลผู้ใช้ทั้งหมดจากฐานข้อมูลของฉันในหน้าเดียว จนถึงที่สุดที่ฉันได้รับคือ $user = mage::getModel('customer/customer')->getCollection()->getData(); ผลตอบแทน array 0 => array 'entity_id' => string '1' (length=1) 'entity_type_id' => string '1' (length=1) 'attribute_set_id' => string '0' (length=1) 'website_id' => string '1' (length=1) 'email' => string 'john.doe@example.com' (length=20) 'group_id' => string '1' (length=1) 'increment_id' => string '000000001' (length=9) 'store_id' => string '1' (length=1) …

5
จะบันทึกการสืบค้น SQL ของการรวบรวมได้อย่างไร?
ฉันต้องการบันทึกแบบสอบถาม SQL สำหรับคอลเลกชันที่กำหนดเอง ฉันลองรหัสต่อไปนี้ แต่ไม่ได้ผล ข้อเสนอแนะใด ๆ จะได้รับการชื่นชม Mage::log($collection->getSelect(),null,'test.log',true);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.