1

我是 Symfony 和 Doctrine 的新手,我正在尝试加入两个表,这样我就可以轻松地从 Twig 模板访问相关的值。

这是我的数据库方案:

+--------------------------------------+--------------------+
|Messages                              |   User             |
|id    user        text        user_id |   id    name       |
|1     testuser    something   1       |   1     John       |
+--------------------------------------+--------------------+

这是我的Message实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="Messages")
 */
class Message {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    protected $user_id;

    /**
     * @ORM\Column(name="text", type="text")
     */
    protected $text;

    /**
     * @ORM\ManyToOne(targetEntity="User")
     * */
    private $user;    
}

这是我的User实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="Users")
 */
class User {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="name", type="string", length=255)
     */
    protected $name;
}

然后在控制器中,我将$messages变量发送到 Twig 模板:

$messages = $this->getDoctrine()->getEntityManager()->getRepository('MeMyBundle:Message')->findAll()

问题是:连接是否正确?如何通过Twig访问name属性?message谢谢。

4

1 回答 1

2

由于您的多对一关系,Message 类中的变量 $user 应该是 User 类型的对象。因为你的变量 $user 和 $name 是私有的或受保护的,你应该为它们创建 getter 和 setter,或者让 Doctrine 为你生成它们。之后$messages[i]->getUser()-getName()应该工作。(生成getter和setter

有关访问关系中的属性的更多信息,请更深入地查看文档的Fetching Related Objects部分。

来自同一个 symfony 文档页面“当然,如果你事先知道你需要访问这两个对象,你可以通过在原始查询中发出一个连接来避免第二个查询。” 如果您想要一个真正的 JOIN 而不是延迟加载的查询,您可以按照文档编写自己的 sql 查询

于 2013-10-24T00:11:43.400 回答