在使用延迟加载的同时,我能从Doctrin2中的arrayCollection中过滤出结果吗?例如,
// users = ArrayCollection with User entities containing an "active" property
$customer->users->filter('active' => TRUE)->first()
对我来说,不清楚过滤器方法是如何实际使用的。
发布于 2011-12-01 13:21:50
Boris Guéry的答案在这篇文章中,可能会对你有所帮助:Doctrine 2, query inside entities
$idsToFilter = array(1,2,3,4);
$member->getComments()->filter(
function($entry) use ($idsToFilter) {
return in_array($entry->getId(), $idsToFilter);
}
);
发布于 2012-05-10 22:22:15
您的用例将是:
$ArrayCollectionOfActiveUsers = $customer->users->filter(function($user) {
return $user->getActive() === TRUE;
});
如果添加->first(),将只返回第一个条目,这并不是您想要的结果。
@ Sjwdavies您需要将()放在要使用的传递变量周围。你也可以缩短,因为in_array返回值已经是布尔值了:
$member->getComments()->filter( function($entry) use ($idsToFilter) {
return in_array($entry->getId(), $idsToFilter);
});
发布于 2012-08-30 20:24:47
Collection#filter
方法确实会立即加载所有成员。在规则2.3中将添加SQL级别的过滤。
https://stackoverflow.com/questions/8334356
复制相似问题