从我的查询中我收到一些值。我尝试使用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';
}
答案 0 :(得分:0)
在您的示例中,$club->getUsers()
可能正在返回一个不是真正数组的Doctrine ArrayCollection。如果你打电话给$club->getUsers()->toArray()
,你会得到你可以使用in_array()的内部数组。
如果已经从Doctrine中提取了您已有的用户对象,也可以在Array Collection中尝试contains()
方法。像$this->em->getRepository('Club')->findOneBy(array('id' => $id))->contains($user);
答案 1 :(得分:0)
用户是否属于俱乐部的概念是俱乐部实体应该拥有的所有权:
// 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根本不是很有效,但是在不了解您的应用程序的情况下,很难建议最佳方式来执行此比较。无论如何,您现在已经获得了一些封装的,可重用的域逻辑而不是程序脚本。