質問

シンプルなIndexControllerがあります。

私がこれを使用するとき:

$collection = Mage::getModel('catalog/product')
                        ->getCollection()
                        ->addAttributeToSelect('*');
echo count($collection);

それはすべての製品(ほんの数匹)を示しているわけではありませんが、これの理由は何でしょうか?すべての製品をロードしたいのですが、ステータスが何であるかは関係ありません。

アップデート:アラン・ストームのおかげで、私は答えを見つけました。使用: echo (string) $collection->getSelect(); 私が見た: (_table_name.store_id = 5)

StoreID 0( 'Admin'など)に設定することで、すべての製品を見ることができました。

論理的に聞こえます...いつものように:-)

役に立ちましたか?

解決

残念ながら、あなたの製品コレクションがあなたがそうすべきだと思うすべての製品を返さない理由をリストする(または知ることさえする)理由は多すぎます。それはバグかもしれませんし、インストールした拡張機能である可能性があります。また、デフォルトのコレクションで返されたものについて誤解がある場合があります。

幸いなことに、これは自分自身をデバッグするのが比較的簡単なことです。の覗き見をすることができます SELECT コレクションが最初のオブジェクトを埋めるために使用されるステートメント。

$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*'); 

echo (string) $collection->getSelect();  

そのSQLを手にすると、Magentoが必要だと思うオブジェクトを返していない理由をわかりやすいはずです。

他のヒント

コレクションにアイテムのカウントを取得する方法は複数あります。残念ながら、PHP内部 count 機能はおそらく最もパフォーマンスのある方法ではありません。

これが他の2人です。

echo $collection->count();

echo $collection->getSize();

私が起こっているのは、あなたのコレクションがあなたが思っているほど深くないということです。 PHPにはメモリの問題があります count 関数(コレクションを配列として反復します);また count 実際にあるアイテムの数を知りません 怠zyなロードのため, 、カウントを求めている時点でコレクションが実際にロードされていません。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top