私は商品を返品する商品コレクション内で作業しており、それらを注文しようとしています。問題は、私の製品属性の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%')'