我在symfony中有两张桌子。images表具有users表的外键。我想检索用户ID等于传递的参数的记录。这是我的尝试
private function serializeUsers(Users $usr) {
return array(
'username' => $usr->getUsername(),
'email' => $usr->getEmail(),
'id' => $usr->getId(),
//I have tried using getter method to retrieve image value here but I cannot because image is related to users
);
}
这是控制器代码
$restresults = $this->getDoctrine()
->getRepository('xxxBundle:Users')
->findBy(['id' => $id]);
array_push($data, $this->serializeUsers($restresult));
从上面的尝试中可以看到,我无法检索到具有用户表外键的图像表的数据。我的设计是错误的还是我还没有弄清楚解决这个问题的逻辑或更好的方法
编辑:
您可以使用实体存储库:
加
* @ORM\Entity(repositoryClass=UsersRepository::class)
* @ORM\Table(name="Users")"
在您的Users实体注释上,您将可以使用它,比在控制器中编写所需的查询更干净
$restresults = $this->getDoctrine()
->getRepository('xxxBundle:Users')
->findBy(['id' => $id]);
写:
$restresults = $this->getDoctrine()
->getRepository('xxxBundle:Users')
->findWithImages($id);
在您的UsersRepository中,有一个获取图像的函数:
public function findWithImages($id)
{
$queryBuilder = $this->createQueryBuilder('u')
->join('u.images', 'i')
->where('u.id = :id')
->setParameter('id', $id);
return $queryBuilder->getQuery()->getResult();
}
编辑结束
你关系倒转了吗?
$ user-> images应该是在您的类构造函数中初始化的私有ArrayCollection,可以通过$ user-> getImages()进行访问;
该变量不对应于数据库列,但允许您甚至从用户端(在这种情况下也不是所有者端)访问图像。
另外,您可能想看看在学说中fetch =“ EAGER”和fetch =“ LAZY”有什么区别
有关如何访问数据的更多详细信息。
还要检查以下内容:http : //docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-bidirectional
在这里,您正在对数据进行规范化而不是对其进行序列化。看看:https://symfony.com/doc/current/components/serializer.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句