繁体   English   中英

在Symfony主义中联接表并从Twig模板访问所有变量

[英]Joining tables in Symfony Doctrine and accessing all the variables from Twig template

我是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中的message访问name属性? 谢谢。

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

有关访问关系中属性的更多信息,请更深入地阅读文档的“ 获取相关对象”部分。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM