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

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


3
การรวบรวมการกรองและการโหลดที่มีประสิทธิภาพ
ตอนนี้ฉันกำลังใช้คอลเลกชันจำนวนมากที่ซ้อนกันอยู่ภายในลูปด้านหน้า เป็นไปได้ไหมที่จะย้ายสิ่งต่าง ๆ เหล่านี้ขึ้นมาสองสามระดับ? ปัจจุบันฉันถูกบังคับให้โหลดคอลเล็กชันที่มีเอนทิตี 51k ขึ้นไปซ้ำแล้วซ้ำอีกซึ่งทำให้สิ่งต่าง ๆ ช้าลงอย่างมาก โดยเฉพาะคอลเลกชัน kitinventory <?php class Codespace_Module_Helper_Item extends other_one{ function functionOne($collection){ ... $data = $collection->getData(); foreach($data as $item){ $this->_functionTwo($item); } ... } function _functionTwo($item){ $model = Mage::getModel('catalog/product'); $id = $model->getIdBySku($item['sku']); $inventoryStatus = Mage::getResourceSingleton('catalog/product')->getAttributeRawValue($id, 'product_inventory_status', 1); $invStatus = $model->getResource()->getAttribute('product_inventory_status')->getSource()->getOptionText($inventoryStatus); if ($invStatus && $id) { …

2
ทำไมคุณภาพเยี่ยมถึงใช้ทรัพยากรและการเก็บแบบจำลอง mysql4
จุดประสงค์ของการใช้ทั้งสองรุ่นนี้คืออะไร ทรัพยากร Mysql4 เหตุใดเราไม่สามารถใช้โมเดลทรัพยากรสำหรับคอลเลกชันทั้งหมด ทำไมเราใช้ MySql4 สำหรับโมดูลง่าย ๆ บางคนอธิบาย

4
Magento รุ่นที่กำหนดเอง (ไม่ใช่ eav), โหลดได้หลายช่อง
ฉันมีโมเดลที่กำหนดเองและโมเดลของทรัพยากร ฉันต้องการโหลดอินสแตนซ์เดียวของโมเดลโดยใช้มากกว่า 1 ฟิลด์ โมเดลมีฟิลด์ต่อไปนี้: id tag_name custom_name group_name ฉันต้องการโหลดโมเดลนี้โดยยึดตาม tag_name, custom_name และ group_name แทนที่จะเป็น id ขณะนี้ฉันกำลังใช้คอลเล็กชันและ addFilter สำหรับแต่ละฟิลด์ ใช้งานได้ แต่ฉันสงสัยว่ามีกลยุทธ์มาตรฐานสำหรับสิ่งประเภทนี้ใน Magento หรือไม่? แก้ไข Core magento ดูเหมือนจะไม่ใช้คอลเลกชันสำหรับสถานการณ์นี้ แต่ใช้การสอบถาม sql โดยตรงในโมเดลทรัพยากร ตัวอย่างของสิ่งนี้คือ: loadByAccountAndDate() ใน Mage_Paypal_Model_Resource_Report_Settlement มีเหตุผลสำหรับสิ่งนี้เมื่อคอลเลกชันดูเหมือนจะเป็นวิธีที่กระชับมากขึ้นในแง่ของจำนวนรหัสที่จะเขียน ฉันไม่รู้ว่าทำไมวีโอไอพีถึงเลือกทำแบบนี้
15 collection  model 

6
วิธีการพิมพ์แบบสอบถามคอลเลกชัน mysql ใน magento 2?
มีgetSelect()->__toString();อยู่ใน Magento 1 สำหรับแบบสอบถามการพิมพ์ของชุดสะสม เหมือนตัวอย่างด้านล่าง $products = Mage::getModel(‘catalog/product’) ->addAttributeToFilter(‘status’, array(‘eq’ => 1)); echo $products->getSelect()->__toString(); magento 2 มีวิธีใดบ้าง? ฉันพบสิ่งนี้->printLogQuery(true);แต่ไม่ได้ผลสำหรับฉัน อัปเดต: ด้านล่างเป็นรหัส ฉันกำลังพยายามหาสินค้าขายดี มันใช้งานได้ดี แต่ฉันต้องการพิมพ์แบบสอบถามเพื่อแก้ไขข้อบกพร่อง $this->_collection->getSelect() ->joinLeft( 'sales_order_item', 'e.entity_id = sales_order_item.product_id', array('qty_ordered'=>'SUM(sales_order_item.qty_ordered)')) ->group('e.entity_id') ->order('qty_ordered '.$this->getCurrentDirectionReverse());

5
กรองการรวบรวมผลิตภัณฑ์ตามคุณลักษณะที่ไม่ใช่แบบแบน
ฉันกำลังทำสิ่งต่อไปนี้: $productCollection = Mage::getModel('catalog/product') ->getCollection(); $productCollection ->addAttributeToFilter('my_attribute', 1); my_attribute ไม่ได้อยู่ในตารางแบน แต่เปิดใช้งานตารางแบน ฉันได้รับการเก็บเต็ม เหตุผลน่าจะเป็น\Mage_Catalog_Model_Resource_Product_Collection::addAttributeToSelect: $columns = $this->getEntity()->getAttributeForSelect($attributeCode); ไม่มี$this->getEntity()เป็นอินสแตนซ์Mage_Catalog_Model_Resource_Product_Flatที่ดึงฟิลด์แบน - และหากไม่พบจะส่งคืนค่าว่าง วิธีที่สะอาดในการเพิ่มแอตทริบิวต์ที่ไม่ใช่แบบแบนไปยังตัวกรองการเก็บคืออะไร? ในกรณีของฉันมันไม่มีเหตุผลที่จะเพิ่มคุณลักษณะไปยังตารางแบน

1
วิธีใช้กลุ่มโดยในชุดข้อมูลวีโอไอพีพร้อมแบบสอบถามแบบใช้ร่วม
ในตารางผู้ดูแลระบบของโมดูลฉันใช้รหัสนี้เพื่อรับชุดและจัดกลุ่มตามรหัสลูกค้า $collection = Mage::getModel('referafriend/statistics')->getCollection(); $collection->getSelect()->group('entity_id'); $this->setCollection($collection); entity_idแต่ที่นี่ฉันจะต้องใช้ตัวแสดงผลและฟังก์ชั่นสำหรับตัวกรองข้อมูลของลูกค้าเช่นชื่อและอีเมล์กับแต่ละ ฉันต้องการเข้าร่วมโมเดลลูกค้าด้วยตารางโมดูลของฉัน สำหรับสิ่งนี้ฉันได้เขียนรหัสนี้ $collection = Mage::getModel('customer/customer')->getCollection() ->addNameToSelect(); $collection->getSelect()->join(array('refer' => 'table_name'),'refer.entity_id = e.entity_id' ); $collection->getSelect()->group('entity_id'); $collection->addAttributeToSelect('*'); แต่มันทำให้ฉันมีข้อผิดพลาดนี้ SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'entity_id' in group statement is ambiguous ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

2
Magento2 เรียงตามข้อในการรวบรวม
ฉันมีชุดรวมที่กำหนดเองซึ่งฉันเพิ่มตัวกรอง ตัวอย่างเช่นฉันมีสิ่งนี้: $giftColletion = $this->_giftFactory->getCollection(); $giftColletion->addFieldToFilter('store_id', 1); ฉันควรเพิ่มตัวกรองใดใน $ giftColletion เพื่อให้สามารถส่งกลับระเบียนทั้งหมดตามตำแหน่งฟิลด์ตามลำดับ ASC

3
การนำทางแบบเลเยอร์สำหรับคอลเลกชันที่กำหนดเองในหน้ากำหนดเอง - magento2
ฉันกำลังหาข้อมูลการนำทางแบบเลเยอร์ใน magento2 เพื่อรับผลิตภัณฑ์แบบกำหนดเอง ฉันได้รับคอลเล็กชันที่กำหนดเองแล้วในเพจที่กำหนดเองจำเป็นต้องแสดงการนำทางแบบเลเยอร์ พยายามที่จะปรับแก้ปัญหา magento1 นี้แต่ไม่สามารถไปได้ไกล ความคิดใด ๆ ที่ฉันสามารถทำได้ใน magento2 สิ่งที่ฉันทำไปแล้วมีดังต่อไปนี้: ขยายแคตตาล็อก ListProduct block สำหรับรายการผลิตภัณฑ์ที่กำหนดเองในหน้ากำหนดเองของฉัน class View extends \Magento\Catalog\Block\Product\ListProduct { public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Data\Helper\PostHelper $postDataHelper, \Magento\Catalog\Model\Layer\Resolver $layerResolver, CategoryRepositoryInterface $categoryRepository, \Magento\Framework\Url\Helper\Data $urlHelper, array $data = [], \Custom\LayerNavigation\Model\Layer $testlayerobj ) { parent::__construct($context,$postDataHelper,$layerResolver, $categoryRepository,$urlHelper,$data); $this->_coreRegistry = $context->getRegistry(); $this->_testlayer = $testlayerobj; …

1
จะระบุลำดับการจัดเรียงแบบกำหนดเองสำหรับการรวบรวมผลิตภัณฑ์ได้อย่างไร
ฉันกำลังพยายามสร้างชุดผลิตภัณฑ์ตามอาร์เรย์รหัสผลิตภัณฑ์และเรียงลำดับชุดสะสมตามอาร์เรย์รหัส $productIds = array(318,310,311); $collection = Mage::getModel('catalog/product') ->getCollection() ->setOrder('entity_id', 'asc') // This will not do the job ->addAttributeToSelect('*') ->addAttributeToFilter('status', 1) ->addAttributeToFilter('entity_id', array( 'in' => $productIds, )); ฉันต้องการที่จะรวบรวมจัดเรียงตามที่ปรากฏใน$productIdsอาร์เรย์ที่มีแต่เหนือรหัสจะกลับมาจัดเรียงคอลเลกชันเช่น318, 310, 311310,311, 312 เป็นไปได้โดยไม่ใช้แบบสอบถาม MySQL ธรรมดาตามที่ระบุด้านล่าง? SELECT * FROM catalog_product_entity WHERE entity_id IN (318, 310, 311) ORDER BY FIELD(entity_id, 318, 310, 311);

2
จะโคลนชุดสะสมใน Magento ได้อย่างไร?
ฉันมีหนึ่งคอลเล็กชันในวิธีที่ฉันต้องการดำเนินการสองอย่างที่แตกต่างกันในคอลเลกชันนี้ ดังนั้นฉันต้องการสำเนาสองชุดที่มีชุดสะสมเดียวกันจากนั้นมอบหมายหนึ่งในสองชุดให้กับชุดรวมต้นฉบับอีกครั้งแล้วส่งคืน $collectionเพื่อให้ง่ายนี้สมมติว่าผมมีคอลเลกชันวัตถุที่เรียกว่า ตอนนี้ฉันกำลังลองด้วยการโคลนนิ่ง PHP เพราะฉันไม่รู้ว่ามีการเก็บรวบรวมวีโอไอพีที่มีการโคลน inbuilt หรือไม่ $coll1 = clone $collection; $coll2 = clone $collection; ตอนนี้ฉันกำลังพยายามทำการดำเนินการที่แตกต่างกันในทั้งสองโคลนแยกของคอลเลกชันดั้งเดิมบางอย่างเช่น $coll1->getSelect()->where('some where condition'); $coll2->getSelect()->where('some different where condition'); if($coll1->count() == 0) { $collection = $coll2; } else { $collection = $coll1; } แต่สิ่งที่แปลกก็คือทั้งคอลเล็กชั่นโคลนเหล่านี้มีทั้งเงื่อนไขที่กำหนด! เงื่อนไข $ coll1 ถูกนำไปใช้กับ $ coll2 พร้อมกับเงื่อนไขของ $ coll2 และในทางกลับกัน ไม่มีใครรู้วิธีการบรรลุเป้าหมายนี้หรือไม่? …
12 collection 

4
หากต้องการเพิ่มตัวกรองเริ่มต้นในกริดใน Magento2
ฉันได้สร้างโมดูลที่กำหนดเองหนึ่งรายการโดยมีแอตทริบิวต์ชื่อฟิลด์ & สถานะในตารางผู้ดูแลระบบ กริดคอลเลกชันในmodule_test_grid_block.xml <arguments> <argument name="id" xsi:type="string">testGrid</argument> <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument> <argument name="default_sort" xsi:type="string">id</argument> <argument name="default_dir" xsi:type="string">desc</argument> <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument> </arguments> ฉันต้องการแสดงข้อมูลที่เปิดใช้งาน มีตัวเลือกใด ๆเพื่อเพิ่มตัวกรองเริ่มต้นในคอลเลกชันกริดของผู้ดูแลระบบหรือไม่ แก้ไข <block class="Namespace\Module\Block\Adminhtml\Test\Grid" name="namespace_module_test.grid" as="grid"> <arguments> <argument name="id" xsi:type="string">testGrid</argument> <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument> <argument name="default_sort" xsi:type="string">id</argument> <argument name="default_dir" xsi:type="string">desc</argument> <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument> <argument …

4
Magento 2: วิธีกรองคอลเลคชั่นผลิตภัณฑ์ตามรหัสร้านค้า
ด้วยการใช้วัตถุจากโรงงานฉันสามารถสร้างผลิตภัณฑ์คว้าชุดผลิตภัณฑ์และดึงรายการแรกของชุดสะสมนั้นได้ /* var $productFactory \Magento\Catalog\Model\ProductFactory */ $product = $this->productFactory->create()->getCollection()->getFirstItem(); อย่างไรก็ตามหากฉันพยายามเพิ่ม store_id ลงในตัวกรองของคอลเลกชัน $product = $this->productFactory ->create() ->getCollection() ->addFieldToFilter('store_id', 1) ->getFirstItem(); ฉันได้รับข้อผิดพลาดดังต่อไปนี้ Invalid attribute name: store_id #0 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(1434): Magento\Eav\Model\Entity\Collection\AbstractCollection->_addAttributeJoin('store_id', 'inner') #1 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(359): Magento\Eav\Model\Entity\Collection\AbstractCollection->_getAttributeConditionSql('store_id', 1, 'inner') #2 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Catalog/Model/Resource/Product/Collection.php(1489): Magento\Eav\Model\Entity\Collection\AbstractCollection->addAttributeToFilter('store_id', 1, 'inner') #3 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(382): Magento\Catalog\Model\Resource\Product\Collection->addAttributeToFilter('store_id', 1) ... #63 {main} สิ่งเดียวกันนี้เกิดขึ้นถ้าฉันพยายามใช้ที่เก็บผลิตภัณฑ์เพื่อกรองโดย store_id (ที่เก็บใช้คอลเล็กชันภายใต้ประทุน) นี่เป็นข้อบกพร่องหรือไม่? …

5
Magento - ไม่สามารถตั้งลำดับของการรวบรวมได้
ดูเหมือนว่าจะสั่งไม่ถูกต้องมีสิ่งใดที่ฉันทำผิดหรือเปล่า ข้อเสนอแนะ? $componentQuantityCollection = Mage::getModel('catalog/product')->getCollection(); $componentQuantityCollection->joinField('qty', 'cataloginventory/stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'); $componentQuantityCollection->addAttributeToFilter('sku', array('in' => $componentSkus))->setOrder('sku','ASC'); คอลเล็กชันอื่นที่ดูเหมือนจะไม่เรียงลำดับซึ่งแตกต่างจากคอลเล็กชันแรก: $kitCollection = Mage::getModel('kitinventory/kitinventory')->getCollection()->addFieldToFilter('kit_sku', $sku)->setOrder('related_sku', 'DESC');

4
แนวทางปฏิบัติที่ดีที่สุดในการเข้าร่วมคุณสมบัติของผลิตภัณฑ์
product_idผมมีตารางที่กำหนดเองที่มีการอ้างอิงสินค้า ตอนนี้ฉันต้องการแสดงข้อมูลผลิตภัณฑ์ (sku, ชื่อ) ในตารางแบ็กเอนด์ของฉันแต่ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร? การเดาที่ดีที่สุดของฉันSKUคือ: $collection->join( 'catalog/product', 'product_id=`catalog/product`.entity_id', array('product_sku' => 'sku') ) (รหัสจาก _prepareCollection() วิธีการในชั้นเรียนของฉันบล็อกตาราง) แต่ชื่อผลิตภัณฑ์ล่ะ สามารถพบได้ใน catalog_product_entity_varchar ความเข้าใจของฉันคือการที่คุณค่อนข้างง่ายจะได้รับมันถ้ารุ่นทรัพยากรของคุณเองและคอลเลกชันจะขึ้นอยู่แล้วเพราะคุณสามารถใช้วิธีการเช่นMage_Eav_Model_Entity_Collection_Abstract joinAttributeแต่แบบจำลองของฉันขึ้นอยู่กับตารางอย่างง่ายและขยายจากMage_Core_Model_Resource_Db_Collection_Abstractและไม่มีjoinAttributeวิธีการที่ใช้ได้ ดังนั้นวิธีที่ดีที่สุดในการรับชื่อผลิตภัณฑ์ในกรณีนี้คืออะไร ขอบคุณสำหรับเวลาและความช่วยเหลือ :-) อัปเดต: เพื่อให้แม่นยำยิ่งขึ้นฉันกำลังพูดถึงรูปแบบและการรวบรวมทรัพยากรของฉัน มันตรงกับโต๊ะเรียบง่ายที่มีคุณสมบัติไม่กี่อย่างเช่น entity_id product_id created_at user_id ความตั้งใจของฉันคือตารางในแบ็กเอนด์ที่ฉันแสดงสถิติบางอย่าง: ProductSku Count(ProductSku) MAX(created_at) เท่าที่ผมรู้ว่า approch _prepareCollection()ดีที่สุดในการทำเช่นนี้จะผ่านชั้นตารางบล็อกและวิธีการที่จะไปมี วิธีการของฉันมีลักษณะเช่นนี้: protected function _prepareCollection() { // Get and set our collection for …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.