Doctrine ORM - >如何将结果设置为数组

时间:2014-01-07 22:33:34

标签: php symfony doctrine-orm

从我的查询中我收到一些值。我尝试使用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';
                    }

2 个答案:

答案 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根本不是很有效,但是在不了解您的应用程序的情况下,很难建议最佳方式来执行此比较。无论如何,您现在已经获得了一些封装的,可重用的域逻辑而不是程序脚本。