从两个相互关联的表中获取记录 - symfony

时间:2018-03-20 03:19:54

标签: php symfony doctrine

我在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));

从我上面的尝试中可以看出,我无法检索具有users表的外键的图像表的数据。我的设计是错误的还是我还没有弄清楚逻辑或更好的方法来解决这个问题

1 个答案:

答案 0 :(得分:0)

编辑:

您可以使用实体存储库:

添加

* @ORM\Entity(repositoryClass=UsersRepository::class)
* @ORM\Table(name="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->图片应该是在类构造函数中初始化的私有ArrayCollection,可以通过$ user-> getImages()访问;

此变量与数据库列不对应,但允许您甚至从用户端访问图像(在案例中不是所有者方)。

另外,您可能需要查看What is the difference between fetch="EAGER" and fetch="LAZY" in doctrine

有关如何访问数据的更多详细信息。

同时检查: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