0

私は商品を返品する商品コレクション内で作業しており、それらを注文しようとしています。問題は、私の製品属性の1つ(プロジェクトの90%でこれを見つけた)が数量、つまり250、5000などであるということです。しかし、これらが数値であるにもかかわらず、Magentoはそれらを次のように扱っていることがわかりました。したがって、この例では、コレクションは次の数量を返します。

50,100,250,500,1000,2000,5000

ただし、addAttributeToSort('quantity','ASC');これは次のようになります。

100,1000,2000,250,50,500,5000

私はvar_dump()コレクションに対してaを実行し、値が文字列として扱われていることを確認しました。したがって、これがおそらく発生している理由です。残念ながら、この属性に応じて多くのカスタム実装と構成可能な製品を備えた6000を超える製品があるため、変更することには消極的です。ここで検索すると、追加するORDER BY 'quantity' *1と実際にソートが正しく実行されることがわかりましたが、この句を標準addAttributeToSort関数に実装できないようです。

誰かが私がこれを実装するのを手伝ってくれるなら、私は試しましaddAttributeToSort('quantity','*1');たが、それはうまくいきません、ただエラーです。

どうもありがとう

アップデート:

次のコードから生成されるクエリの構文は次のとおりです。

$collection = $this->getUsedProductCollection($product)
                   ->addAttributeToSelect('*')
                   ->addFieldToFilter('name', array( 'like' => '%' . $stock . '%' ));
$collection->getSelect()->order(new Zend_Db_Expr('quantity' *1)); 
count($collection);

'SELECT 'e'.*, 'link_table'.'parent_id', IF(at_name.value_id > 0, at_name.value, at_name_default.value) AS 'name', 'price_index'.'price', 'price_index'.'tax_class_id', 'price_index'.'final_price', IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS 'minimal_price', 'price_index'.'min_price', 'price_index'.'max_price', 'price_index'.'tier_price' FROM 'catalog_product_entity' AS 'e' INNER JOIN 'catalog_product_super_link' AS 'link_table' ON link_table.product_id = e.entity_id INNER JOIN 'catalog_product_website' AS 'product_website' ON product_website.product_id = e.entity_id AND product_website.website_id = '1' INNER JOIN 'catalog_product_entity_varchar' AS 'at_name_default' ON ('at_name_default'.'entity_id' = 'e'.'entity_id') AND ('at_name_default'.'attribute_id' = '65') AND 'at_name_default'.'store_id' = 0 LEFT JOIN 'catalog_product_entity_varchar' AS 'at_name' ON ('at_name'.'entity_id' = 'e'.'entity_id') AND ('at_name'.'attribute_id' = '65') AND ('at_name'.'store_id' = 1) INNER JOIN 'catalog_product_index_price' AS 'price_index' ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0 WHERE (link_table.parent_id = 3781) AND (IF(at_name.value_id > 0, at_name.value, at_name_default.value) LIKE '%PCL Labels%')'

4

2 に答える 2

1

試す $collection->getSelect()->order(new Zend_Db_Expr('quantity' *1));

于 2012-09-21T09:31:45.970 に答える
0

結局、私はこれをPHPでksort()。Zend関数を実装するときのデータベースモデルはどこかでオーバーライドされていて、それを理解する時間がありませんでした。

于 2012-09-25T08:10:29.287 に答える