【问题标题】:Joining tables in Symfony Doctrine and accessing all the variables from Twig template在 Symfony Doctrine 中加入表格并从 Twig 模板访问所有变量
【发布时间】:2013-11-02 11:44:19
【问题描述】:

我是 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 属性?谢谢。

【问题讨论】:

    标签: php sql symfony join doctrine-orm


    【解决方案1】:

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

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

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

    【讨论】:

    • 哇,我这么接近了,还没有自己解决。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2023-04-05
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多