Symfony 3 - 使用ManyToOne和OneToMany并检索数据

时间:2016-11-22 14:09:09

标签: doctrine symfony

我的数据库中有一个User表和一个Job Title表。

我已经设置了一个User实体和一个JobTitle实体。

在我的用户实体中,我有:

 /**
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\JobTitle", inversedBy="users")
 * @ORM\JoinColumn(name="job_title_id", referencedColumnName="id")
 */
public $jobTitle;

在我的JobTitle实体中,我有:

/**
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\User", mappedBy="jobTitle")
 */
private $users;

以下是用户表中的示例设置:

job_title_id | Username
1            | jdoe 

以下是职位表中的示例设置:

id | job_title
1  | Owner

当我创建用户时,所有内容都按预期输入数据库。

我的问题是在我的用户列表页面中显示实际的职位。

这是我的控制器:

/**
 * @Route("/users", name="users")
 */
public function listAction()
{
    $loggedInUser = $this->getUser();
    $users = $this->get('fos_user.user_manager')->findUsers();

    if (!is_object($user) || !$user instanceof UserInterface) {
        throw new AccessDeniedException('This user does not have access to this section.');
    }
    return $this->render('users/users.html.twig', array(
        'user' => $loggedInUser,
        'users' => $users,
    ));
}

在我的twig模板中,我试图使用{{user.jobTitle}},但我得到转换为字符串错误,这是有道理的,但我不知道如何获得实际的职位名称显示在树枝上页。

如果您需要更多信息,请告诉我。

如何使用users表中的job_title_id检索作业标题名称?

1 个答案:

答案 0 :(得分:1)

您没有展示所有实体,因此我必须根据上面的内容“猜测”。

看起来像这样:{{ user.jobTitle }}返回一个JobTitle对象。您可以通过转储来确认。

因为它是一个对象,我怀疑你需要做这样的事情:

{{ user.jobTitle.job_title }}

或者可能使用JobTitle的对象方法(不知道它们是什么):

{{ user.jobTitle.getJobTitle }}

或类似的东西。尝试一下。