我可以在使用惰性加載的時候過濾掉Doctrine 2中arrayCollection的結果嗎?例如,Doctrine 2 ArrayCollection過濾方法
// users = ArrayCollection with User entities containing an "active" property
$customer->users->filter('active' => TRUE)->first()
目前還不清楚過濾方法是如何實際使用的。
我可以在使用惰性加載的時候過濾掉Doctrine 2中arrayCollection的結果嗎?例如,Doctrine 2 ArrayCollection過濾方法
// users = ArrayCollection with User entities containing an "active" property
$customer->users->filter('active' => TRUE)->first()
目前還不清楚過濾方法是如何實際使用的。
的鮑里斯·伽利湖答案的這個職位,可以幫助你: Doctrine 2, query inside entities
$idsToFilter = array(1,2,3,4);
$member->getComments()->filter(
function($entry) use ($idsToFilter) {
return in_array($entry->getId(), $idsToFilter);
}
);
您的使用情況是:
$ArrayCollectionOfActiveUsers = $customer->users->filter(function($user) {
return $user->getActive() === TRUE;
});
如果添加 - >第(),你會得到只有返回的第一個條目,這不是你想要的。
@ Sjwdavies 您需要將()傳遞給USE的變量。您也可以縮短爲in_array回報是一個布爾值已經:
$member->getComments()->filter(function($entry) use ($idsToFilter) {
return in_array($entry->getId(), $idsToFilter);
});
原則現在有Criteria
,它提供了一個API,用於根據上下文使用SQL和PHP過濾集合。
更新
這將實現結果的接受的答案,而不從數據庫中獲取的一切。
use Doctrine\Common\Collections\Criteria;
/**
* @ORM\Entity
*/
class Member {
// ...
public function getCommentsFiltered($ids) {
$criteria = Criteria::create()->where(Criteria::expr()->in("id", $ids));
return $this->getComments()->matching($criteria);
}
}
感謝您清除這將實際上改變sql查詢,而不是選擇數據庫中的所有內容,然後通過循環應用過濾器! – tftd
http:// stackoverflow。com/questions/35358597/in-predicate-with-criteria-filtering-isnt-working please,看看這裏:) – DonCallisto
在集合上使用'indexBy =「xxx」'並調用'匹配時出現一個問題'在上面,索引被丟棄。 https://github.com/doctrine/doctrine2/issues/4693 – fyrye
但仍然方法加載到許多數據,例如計數,加載所有匹配的數據。 – 2013-09-19 23:05:08