タグ付けされた質問 「collection」

Magentoコレクションに関する質問

6
コレクションのgetSize()とcount()の違い
どちらも同じだと何度も聞いたことがあります。しかし、奇妙な問題に直面しています。CatalogSearchモジュールの製品コレクションでは、count()が正しい製品数を返しているのに対し、getSize()はゼロを返しています。 だから、基本的にこれは私が得ているものです: $collection->count(); //correct count $collection->getSize(); //0 ただし、検索ページにページネーションと製品を表示するかどうかを決定する際に、getSize()に正しいカウントが必要です。より具体的にするために、コレクションでのみ内部結合、左結合、およびWHERE条件を使用しています。 この奇妙な問題が発生する理由はありますか? ありがとう 更新: 前の質問、Magentoでコレクションを複製する方法は?1つのコレクションで2つの異なる操作を実行したかった。最初のコレクションは正しいgetSize()を示していますが、getSize()がゼロの場合、WHERE句を削除して新しいWHERE条件を指定しました。この後、私は期待していた正しい生SQLを取得し、MySQLで実行すると正しいレコードセットも提供しますが、コレクションのgetSize()のみがゼロカウントを提供します。 そのため、getSize()が古いカウントを取得しているため、基本的にコレクションを再ロードする必要があります。理にかなっていますか?


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
コレクションモデルとリソースモデルについて
リソースモデルとコレクションモデルの使用について少し混乱しています。特定の属性を使用して製品をロードする例を見ると、コレクションモデルを使用する場合もあれば、リソースモデルを使用する場合もあります。 また、特定の方法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 null") ただし、これによりクエリが変更されるため、販売/注文のコレクションを返す必要があります。 シンプルなものが足りないと感じています... 編集 …

1
コレクションの履歴はMagento 2にありますか?
現在Magento 2(2.1.2)にある多くのコードは、Magento 1から多かれ少なかれ移植されており、将来、多くのコードが同等のものに置き換えられることを知っています。この点で、Magento 2のコレクションの未来はどうなっているのでしょうか。 説明させてください: Magento 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 } Magento 2: Magentoは抽象化の多くの新しいレイヤーを追加し、より強固な作業方法を実装します。つまり、エンティティのリストが必要な場合は、リポジトリから要求します。 $productResults = $this->productRepository->getList($searchCriteria); 私たちは、フィルタを適用したい場合は、私たちはの組み合わせを使用しSearchCriteriaBuilder、FilterGroupBuilder、FilterBuilderとSortOrderBuilder: $this->searchCriteriaBuilder->addSortOrder( $this->sortOrderBuilder ->setField('created_at') ->setAscendingDirection() ->create() ); …


2
ページネーションをネイティブに使用してMagentoコレクションを反復処理することは可能ですか?
それが私が意味することは-行う方法があります: $collection = $model->getCollection(); foreach ($collection as $item) { $item->doStuff(); } コレクションに10万行ある場合でも、MySQLから一度に1ページの行だけをロードし、裏で魔法のようにページ分割します。 Varien_Data_Collection_Db::load()それを見ることは可能だとは思えないが、ただ確認したかった。これは、一般的に必要なもののように思えます。

5
Magentoコレクションで「持つ」を使用する問題
Magento管理モジュールでグリッドのカスタムコレクションを作成しようとしています。「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' => 'giftcard')); $collection->addFieldToFilter('main_table.created_at', …

2
addFilter vs addFieldToFilter
Magentoコレクションには、フィルタリングのための2つの方法があります。 1. Varien_Data_Collection_Db::addFieldToFilter 2. Varien_Data_Collection::addFilter 両方のメソッドがwhere条件をに追加するようZend_Db_Selectです。また、どのような利点がありaddFilterますか?代わりにaddFieldToFilterいつ使用する必要がありますか?

2
「属性値」(option_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 = ??? 今、私は数値である属性option_idを得ました... ...自分の属性値のフロントエンド属性ラベルを読み込む最良の方法は何ですか?(製品全体をロードせずに) ソリューションのおかげでマリウス: // Not loading the product - just creating a simple instance $product = Mage::getModel('catalog/product') ->setStoreId($store_id) ->setData($attribute_code,$option_id); $option_label = $product->getAttributeText($attribute_code);

7
カテゴリIDから製品コレクションを取得する
カテゴリIDから製品のコレクションを取得しようとしています。私が試したいくつかのことがブロックにあります: $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); これは機能しませんが、エラーも表示されません。同じ質問のように思える別の投稿を見ました。Magento-特定のカテゴリーから製品を入手してください。助けてくれてありがとう!


3
LIKEを使用した結果のフィルタリング
次の3つの「haystack」文字列を考えてください。 a) foo bar b) welcome to foo bar industries c) foo barer そして今、私の「針」: foo bar (ヘー) フィルターを、干し草の山の文字列aとbに一致させますが、cは一致させません。私が試してみました: $collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%')); しかし、上記はcと一致します。 私も試しました: $collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces 上記はbとのみ一致します。 どんな助けも大歓迎です。

4
グリッドに列を追加(オブザーバー)-where句の列 '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') { /* @var $block Mage_Adminhtml_Block_Customer_Grid */ …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.