在Doctrine ArrayCollection中获取给定项

时间:2019-02-18 18:58:36

标签: php doctrine

开发一个API,其中在每个请求开始时,提供的API密钥用于获取与该请求相关联的Account对象。

$account = $em->getRepository(Entity\Account\Account::class)
              ->findOneBy(['mainKey'=>$request->getHeaderLine('X-API-Key')]);

此帐户实体包含一个用户的ArrayCollection,其中每个用户实体都包含一个username属性,该属性对于给定帐户是唯一的。

鉴于用户名,我如何获得用户实体?我可以做以下事情,但是,我觉得我应该做不同的事情。

$user = $em->getRepository(Entity\Account\User::class)
           ->findOneBy(['accountId'=>$account->getId(), 'username'=>'John.Doe']);

谢谢

PS。我假设findOneBy()在幕后使用了准备好的语句,并且不受SQL注入的限制,对吧?

PSS。我只是假设ArrayCollection可以容纳一组对象,但是现在来看某些文档还不确定。

2 个答案:

答案 0 :(得分:0)

如果AccountUser相关(我想是一对一的),则Account应该定义了$user属性。您可以访问它:

$user = $account->getUser();

getUser在哪里:

public function getUser()
{
    return $this->user;
}

答案 1 :(得分:0)

这两种方法似乎都有效:

$criteria = \Doctrine\Common\Collections\Criteria::create()
->where(\Doctrine\Common\Collections\Criteria::expr()->eq("username", $username));
$user = $users->matching($criteria)->current();

$expr = new \Doctrine\Common\Collections\Expr\Comparison('username', '=', $username);
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->where($expr);
$user = $users->matching($criteria)->current();