从我的查询中,我收到了一些值。我尝试使用if(in_array),但不起作用。什么是最好的解决方案?下面你可以看到我的解决方案:
$beheerdersArray = array();
foreach($club->getUsers() AS $result){
$beheerdersArray[] = $result->getId();
}
echo 'User ID: '.$user->getId();
if(!in_array($user->getId(),$beheerdersArray)){
echo 'Beheerder niet gevonden';
} else {
echo 'Beheerder gevonden';
}
用户是否属于俱乐部的概念是俱乐部实体应该拥有的:
// Controller
if ($club->hasUser($user)) {
echo "User is a member";
}
// Club Entity
public function hasUser(User $user)
{
foreach ($this->getUsers() as $member) {
if ($member->getId() === $user->getId()) {
return true;
}
}
return false;
}
Foreach
遍历每个用户并比较id根本不是很有效,但在不了解更多应用程序的情况下,很难提出执行此比较的最佳方式。无论如何,您现在已经获得了一些封装的、可重用的域逻辑,而不是过程脚本。
在您的示例中,$club->getUsers()
可能返回一个不是真正数组的Doctrine ArrayCollection。如果您调用$club->getUsers()->toArray()
,您将获得可以在in_array()中使用的内部数组。
如果您已经拥有的用户对象是从Doctrine中提取的,您也可以在Array Collection中尝试contains()
方法。类似$this->em->getRepository('Club')->findOneBy(array('id' => $id))->contains($user);