関連付けられたオブジェクトに対して Collection#Matching を使用したいのですが、うまくいきません。掘り下げてみると、Doctrine が 2 つの値に対して in_array 呼び出しを行っているように見えます。針は Persisted Collection (私の関連付け) で、干し草の山は一致させたいエンティティの配列です。針は永続コレクションであるため、一致は失敗します。
これはおそらくバグですか、それとも関連付けがサポートされていませんか? サポートされていない場合、回避策はありますか?
例:
$query = $em->createQuery("SELECT c FROM Entity\BidCategory c WHERE c.code IN(:categories)");
$query->setParameter('categories', array('CATEGORY_1', 'CATEGORY_2'));
$my_categories = $query->getResult();
$criteria = array(
"min_pub_date" => "01-07-2012",
"max_pub_date" => "01-08-2012"
);
$query = $em->createQuery("SELECT b From Entity\Bid b JOIN b.categories c WHERE b.pub_date > :min_pub_date AND b.pub_date < :max_pub_date");
$query->setParameter("min_pub_date", new DateTime($criteria['min_pub_date']));
$query->setParameter("max_pub_date", new DateTime($criteria['max_pub_date']));
$query->setMaxResults(1);
$bids = $query->getResult();
$criteria = Criteria::create()
->where(Criteria::expr()->in("categories", $my_categories));
$collection = new Doctrine\Common\Collections\ArrayCollection();
foreach($bids as $bid)
{
$collection->add($bid);
}
$matched_bids = $collection->matching($criteria);