获取Doctrine ArrayCollection中的给定项

问题描述 投票:0回答:2

开发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包含一组对象,但是看一些文档,我现在还不确定。

php doctrine
2个回答
0
投票

如果AccountUser有关(我认为它是一对一的),那么Account应该定义$user属性。你可以访问它有点:

$user = $account->getUser();

getUser在哪里:

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

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();
© www.soinside.com 2019 - 2024. All rights reserved.