[英]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.