Doctrine2を使用して、Symfony2でエンティティ(製品とカテゴリ)の間に多対多の関連があります。
各カテゴリを一覧表示し、次にそのカテゴリ内の一意の製品名をそれぞれ一覧表示します。各製品は明らかに多くのカテゴリに分類できます (一部のカテゴリは空です)。
基本的なエンティティ マネージャー メソッドなどでそれを行う方法は次のとおりです。注釈は PHPStorm のヒントであり、コードの自動補完が機能します。
$repository = $this->getDoctrine()->getRepository('SomeRandomBundle:Category');
$categories = $repository->findAll();
$response = '';
/** @var $category Category */
foreach ($categories as $category){
$products = $category->getProducts();
if (!$products->isEmpty()){
$productArr = array();
/** @var $product Product */
foreach ($products as $product){
$productArr[] = $product->getName();
}
$productArr = array_unique($productArr);
$response .= $category->getName() . "\n";
foreach ($productArr as $prod){
$response .= "\t$prod\n";
}
}
}
これは、DB で 30 ヒットになります。(29 カテゴリ) それでいいです。私の問題は、 \Doctrine\Common\Collections\Collection から一意の製品名だけを取得したいことです
製品名をループし、それらを配列に入れてから array_unique を呼び出す複雑なコードを見ることができます。確かにうまくいきますが、もっとエレガントな方法が必要です。