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

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

6
ความแตกต่างระหว่าง getSize () และ count () ในการรวบรวม
ฉันเคยได้ยินหลายครั้งว่าพวกเขาทั้งสองเหมือนกัน แต่ฉันกำลังเผชิญกับปัญหาแปลก ๆ ในโมดูลผลิตภัณฑ์ CatalogSearch จำนวน () กำลังคืนจำนวนผลิตภัณฑ์ที่ถูกต้องขณะที่ getSize () กลับมาเป็นศูนย์ ดังนั้นโดยทั่วไปนี่คือสิ่งที่ฉันได้รับ: $collection->count(); //correct count $collection->getSize(); //0 แต่ฉันต้องการให้ getSize () มีจำนวนที่ถูกต้องตามที่ตัดสินใจว่าจะแสดงเลขหน้าและผลิตภัณฑ์ในหน้าค้นหาหรือไม่ ฉันกำลังใช้ Inner Join, Left Join และ Where มีเงื่อนไขเฉพาะในคอลเล็กชันเพื่อให้มีความเฉพาะเจาะจงมากขึ้น ความคิดใดที่ว่าทำไมฉันถึงได้รับเรื่องแปลก ๆ นี้? ขอบคุณ UPDATE: คำถามก่อนหน้าของฉันจะคัดลอกคอลเล็กชันใน Magento ได้อย่างไร ฉันต้องการดำเนินการสองอย่างที่แตกต่างกันในคอลเล็กชันเดียว คอลเล็กชันแรกแสดง getSize () ที่ถูกต้อง แต่ถ้า getSize () เป็นศูนย์ฉันจะลบส่วนคำสั่ง WHERE และให้เงื่อนไข WHERE ใหม่ …


3
วิธีที่มีประสิทธิภาพมากที่สุดในการรับ ID ทั้งหมดจากคอลเล็กชัน
ในอดีตเพื่อรับ ID ทั้งหมดของคอลเลกชันผลิตภัณฑ์ฉันเคยใช้getAllIdsกับคอลเลกชันเสมอเชื่อว่านี่เป็นวิธีที่ป้องกันการโหลดคอลเลกชันเต็มรูปแบบด้วยข้อมูลเป็นต้น แต่จริงๆแล้วฉันดูวิธีการในวันนี้และโหลดคอลเลกชันและวนซ้ำแต่ละไอเท็มเพื่อรับอาร์เรย์ ID public function getAllIds() { $ids = array(); foreach ($this->getItems() as $item) { $ids[] = $this->_getItemId($item); } return $ids; } คำถามของฉันคืออะไรวิธีที่มีประสิทธิภาพมากที่สุดในการดึงเฉพาะฟิลด์ ID จากการรวบรวมคืออะไร?
37 collection 

1
เกี่ยวกับ Collection Model และ Resource Model
ฉันสับสนเล็กน้อยเกี่ยวกับการใช้โมเดลทรัพยากรและโมเดลการรวบรวม บางครั้งเมื่อฉันเห็นตัวอย่างสำหรับการโหลดผลิตภัณฑ์โดยใช้คุณลักษณะเฉพาะในบางตัวอย่างพวกเขาใช้โมเดลการรวบรวมและบางครั้งพวกเขาใช้โมเดลทรัพยากร นอกจากนี้ฉันสามารถใช้วิธีการเฉพาะget...และset...พร้อมกับชื่อแถวของตารางได้เมื่อใด ชอบ,getName getIdฉันพยายามใช้ แต่ไม่สามารถรับค่าและแสดงข้อผิดพลาด: "การโทรไม่ได้กำหนดวิธีในวัตถุ" $product = Mage::getModel('catalog/product') ->loadByAttribute('name', 'product_name'); echo $product->getName(); echo $product->getSku(); มันแสดงให้เห็น "วิธีที่ไม่ได้กำหนดgetSku()" ถ้าฉันใช้var_dump($product)SKU จะแสดงเป็นวัตถุ แต่ไม่สามารถรับ SKU ที่ใช้getSku()...

2
ปล่อยให้เข้าร่วมตารางในแบบสอบถามการรวบรวม
ฉันกำลังทำสิ่งต่อไปนี้เพื่อรับคำสั่งบางส่วนจากระบบเพื่อการส่งออก: $orders = Mage::getModel('sales/order')->getCollection() ->addFieldToFilter('status', $statusToExport) ->addFieldToFilter('store_id', $this->processingStoreId) ->addFieldToFilter('updated_at', array('gteq' => date('Y-m-d H:i:s', $lastSyncTime))); ฉันต้องเพิ่มบางอย่างที่มันไม่ส่งออกหากคำสั่งซื้อentity_idอยู่ในตารางที่กำหนดเองที่ฉันมี ถ้าฉันใช้ SQL ฉันจะทำ: left join myTable as mt on main_table.entity_id = mt.entity_id where mt.entity_id is null แต่ฉันไม่แน่ใจว่าจะแก้ไขแบบสอบถามคอลเลกชันเพื่อทำสิ่งที่คล้ายกันได้อย่างไร หมายเหตุ: ฉันลองแล้ว $orders = $orders->getSelect() ->joinLeft( array("t1" => $myTable), "main_table.entity_id = t1.entity_id", array("admin_field_id" => "t1.id") ) ->where("t1.id is …

1
คอลเล็กชันมีประวัติใน Magento 2 หรือไม่
ฉันรู้ว่าโค้ดจำนวนมากที่อยู่ใน Magento 2 (2.1.2) ในปัจจุบันมีการย้ายพอร์ตมากขึ้นหรือน้อยลงจาก Magento 1 และโค้ดจำนวนมากจะถูกแทนที่ด้วยสิ่งที่เทียบเท่าในอนาคต ในแง่นี้ฉันสงสัยว่าอนาคตของคอลเลกชันใน Magento 2 คืออะไร ให้ฉันอธิบาย: วีโอไอพี 1: ใน Magento 1 เราเคยได้รับคอลเล็กชันเช่นนี้: $products = Mage::getModel('catalog/product')->getCollection(); จากนั้นเราสามารถใช้ตัวกรองและการดำเนินการอื่น ๆ กับคอลเลกชัน: $products->addAttributeToFilter('price', ['gteq' => 10]); $products->addFieldToFilter('created_at', ['lt' => '2016-10-10']); $products->setPageSize(10); // ... etc ... และสุดท้าย แต่ไม่ท้ายสุดคอลเลคชั่นของเราจะคืนโมเดล: foreach ($products as $product) { echo get_class($product); // Mage_Catalog_Model_Product } …

3
วิธีตัดตารางวีโอไอพีโดยใช้คอลเล็กชัน?
ฉันมีตารางที่กำหนดเอง ฉันต้องการตัดทอนตารางโดยใช้ Magento collectionโดยไม่มีการสืบค้น SQL หวังว่าบางคนจะให้ข้อมูลที่เป็นประโยชน์

2
เป็นไปได้ไหมที่จะเน้นย้ำการสะสม Magento ด้วยการให้เลขหน้า
สิ่งที่ฉันหมายถึงคือ - มีวิธีทำ: $collection = $model->getCollection(); foreach ($collection as $item) { $item->doStuff(); } ในลักษณะที่แม้ว่าคอลเลคชั่นจะมีแถว 100k แต่ก็จะโหลดหน้าแถวในเวลาเดียวจาก MySQL และให้เลขหน้าสำหรับคุณอย่างน่าอัศจรรย์เบื้องหลัง จากการดูVarien_Data_Collection_Db::load()มันไม่ได้เป็นไปได้ แต่แค่ต้องการตรวจสอบ ดูเหมือนว่าสิ่งที่ควรเป็นความต้องการทั่วไป

5
ปัญหาในการใช้“ การมี” ในชุดวีโอไอพี
ฉันกำลังพยายามสร้างคอลเลกชันที่กำหนดเองสำหรับกริดในโมดูลผู้ดูแลระบบของวีโอไอพี ฉันได้สร้างวิธีการรวบรวมใหม่ที่เรียกว่า "addAttributeHaving" ซึ่งทำต่อไปนี้: public function addAttributeHaving($value) { $this->getSelect()->having($value); return $this; } ดูรหัสสะสม: $collection->addFieldToSelect( array( 'entity_id', 'created_at', 'increment_id', 'customer_email', 'customer_firstname', 'customer_lastname', 'grand_total', 'status' ) ); $collection->getSelect()->joinLeft(array('sfop' => 'sales_flat_order_payment'), 'main_table.entity_id = sfop.parent_id', 'sfop.amount_authorized'); $collection->getSelect()->columns('sum(sfop.amount_authorized) AS AUTHD'); $collection->getSelect()->columns('grand_total - sum(sfop.amount_authorized) AS DIF_AU'); $collection->addFieldToFilter('main_table.state', array('in' => array('new','payment_review'))); $collection->addFieldToFilter('main_table.sd_order_type', array('neq' => 7)); $collection->addFieldToFilter('sfop.method', array('neq' …

2
addFilter vs addFieldToFilter
Magento collection มีวิธีการกรองสองวิธี: 1. Varien_Data_Collection_Db::addFieldToFilter 2. Varien_Data_Collection::addFilter Zend_Db_Selectดูเหมือนว่าทั้งสองวิธีเพิ่มที่เงื่อนไข และข้อดีอะไรaddFilterนำมา? เมื่อฉันควรใช้มันแทนaddFieldToFilter?

2
วิธีรับคุณลักษณะ“ ป้ายกำกับตัวเลือก / ข้อความแอตทริบิวต์” ที่มี“ ค่าคุณลักษณะ” (ตัวเลือก _ID)
สมมติว่าฉันมีแอททริบิวต์ที่เป็นชุดของตัวเลือก (ดร็อปดาวน์ / เลือกหลายรายการ) ฉันสามารถดึงค่าคุณสมบัติสำหรับผลิตภัณฑ์ที่กำหนด: $store_id = [something]; $productId = [something]; // this is a select/multiselect $attribute_code = [something]; $option_id = Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, $attribute_code, $store_id ); $option_label = ??? ตอนนี้ฉันได้ attribute option_id ซึ่งเป็นค่าตัวเลข ... ... วิธีที่ดีที่สุดในการโหลดป้ายกำกับส่วนหน้าสำหรับค่าคุณลักษณะของฉันคืออะไร (ไม่โหลดสินค้าเต็ม) การแก้ปัญหาขอบคุณMarius : // Not loading the product - just creating a simple instance $product …

7
รับชุดผลิตภัณฑ์จากรหัสหมวดหมู่
ฉันพยายามรับชุดผลิตภัณฑ์จากรหัสหมวดหมู่ มีบางสิ่งที่ฉันลองอยู่ในบล็อก: $category = Mage::getModel('catalog/category')->load(123) ->getProductCollection(); และ $category = Mage::getModel('catalog/category')->load(123); $products = $category->getProductCollection()->addCategoryFilter($category) ->addAttributeToFilter('type_id', 'simple') ->addAttributeToSelect('*'); ก็ลองทำมันจาก phtml $oCatId = Mage::getModel('catalog/category')->load(769); $products->addCategoryFilter($oCatId); ไม่มีการทำงานนี้ แต่ฉันไม่เห็นข้อผิดพลาดใด ๆ ฉันเห็นโพสต์อื่นที่ดูเหมือนคำถามเดียวกัน: วีโอไอพี - รับผลิตภัณฑ์จากหมวดหมู่เฉพาะแต่วิธีการนั้นไม่ได้ผลสำหรับฉันเช่นกัน ขอบคุณสำหรับความช่วยเหลือใด ๆ !

1
วิธีเพิ่มเลขหน้าในคอลเล็กชันที่กำหนดเองใน Magento 2
ฉันกำลังทำงานกับโมดูลที่กำหนดเอง ฉันจะใช้วีโอไอพีเริ่มต้นเลขกับฉันคอลเลกชันที่กำหนดเองและยังตั้งข้อ จำกัด ที่กำหนดเองในที่?

3
กรองผลลัพธ์โดยใช้ LIKE
พิจารณาสตริง "Haystack" ทั้งสามนี้: ก) foo bar ข) welcome to foo bar industries ค) foo barer และตอนนี้ "เข็ม" ของฉัน: foo bar (หึ) ฉันต้องการให้ตัวกรองของฉันจับคู่เข็มของฉันกับสตริงที่กองหญ้าเป็น & a แต่ไม่ใช่ c ฉันเหนื่อย: $collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%')); แต่ข้างต้นตรงกับ c ฉันก็ลอง: $collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces ด้านบนตรงกับ b. ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

4
เพิ่มคอลัมน์ในกริด (ผู้สังเกตการณ์) - คอลัมน์ 'store_id' ในกรณีที่คำสั่งย่อยเป็นปัญหาที่ไม่ชัดเจน
ฉันกำลังเพิ่มคอลัมน์ในตารางคำสั่งซื้อโดยใช้วิธีผู้สังเกตการณ์: ในกิจกรรม -> sales_order_grid_collection_load_beforeฉันกำลังเพิ่มการเข้าร่วมในคอลเล็กชัน ในกิจกรรม -> core_block_abstract_prepare_layout_beforeฉันกำลังเพิ่มคอลัมน์ลงในตาราง แก้ไขข้อมูลเพิ่มเติม: ในกิจกรรม (1): public function salesOrderGridCollectionLoadBefore($observer) { $collection = $observer->getOrderGridCollection(); $collection->addFilterToMap('store_id', 'main_table.store_id'); $select = $collection->getSelect(); $select->joinLeft(array('oe' => $collection->getTable('sales/order')), 'oe.entity_id=main_table.entity_id', array('oe.customer_group_id')); } ในเหตุการณ์ (2): public function appendCustomColumn(Varien_Event_Observer $observer) { $block = $observer->getBlock(); if (!isset($block)) { return $this; } if ($block->getType() == 'adminhtml/sales_order_grid') { /* …

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