私は Doctrine を初めて使用するので、これは経験豊富な人にとってはかなり明白な質問に思えるかもしれません。
インポートされるすべての行に有効なデータが含まれていることを確認する必要があるデータ インポート ツールを作成しています。たとえば、行に製品コードへの参照がある場合、そのコードを持つ既存の製品オブジェクトがあることを確認する必要があります。そうでない場合は、その行に無効のフラグを立てます。
これで、行ごとにこのようなことを簡単に行うことができます。
$productCode = $this->csv->getProductNumber();
$product = $doctrine->getRepository('MyBundle:Product')->findOneBy(array('code' => $productCode ));
しかし、それは恐ろしく非効率的なようです。そこで、Product Collection 全体を返してから、その中で反復することを考えました。
$query = $this->getEntityManager()->createQuery('SELECT p FROM MyBundle\Entity\Product p');
$products = $query->getResult();
すべて順調ですが、検索するために厄介なループを作成する必要があります。
2 つの質問:
1)。追加のデータベース ヒットを発生させずにコレクション結果内を検索できる Magento Collections のようなユーティリティ メソッドがいくつか欠けているのではないかと思っていました。たとえば、Magento では、これによりコレクションが反復処理され、コード プロパティでフィルター処理されます。
$collection->getItemByColumnValue("code","FZTY444");
2)。現時点では、「長方形配列」を返す以下のクエリを使用しています。より効率的ですが、より良い可能性があります。
$query = $this->getEntityManager()->createQuery('SELECT p.code FROM MyBundle\Entity\Product p');
$products = $query->getResult();
結果セットを繰り返してフラット配列に変換することなく、単一次元配列を返す方法はありますか? 結果に対して in_array() を使用できますか?