开发一个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可以容纳一组对象,但是现在来看某些文档还不确定。
答案 0 :(得分:0)
如果Account
与User
相关(我想是一对一的),则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();