我有一个用户实体和一个日志实体。我有一个从用户到日志的OneToMany连接。 在我的日志表中根据用户存储日志条目。
我输出用户列表:
控制器:
$user = $this->getDoctrine()
->getRepository('SeotoolMainBundle:User')
->findBy(array('isActive' => 1, 'isAdmin' => 0));
TWIG
{% for user in list_user %}
{{ user.username }}
{% endfor %}
现在我想接收一行日志表,按一个名为“date”的字段排序,并在for用户循环中返回,如下所示:
{% for user in list_user %}
{{ user.username }}
{{ user.log.lastEntry
{% endfor %}
我该怎么做?
实体User.php:
/**
* @ORM\OneToMany(targetEntity="Log", mappedBy="user")
* @ORM\OneToMany(targetEntity="Log", mappedBy="editor")
*/
protected $log;
实体Log.php
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="log")
* @ORM\JoinColumn(name="user", referencedColumnName="id")
*/
protected $User;
答案 0 :(得分:1)
假设您访问Log
Collection对象的getter是getLogMessages
方法,并假设您可以使用getMessage
方法访问日志消息,则以下内容应解决此问题:< / p>
{{ User.getLogMessages().last().getMessage() }}
last
方法可让您访问存储在集合中的最后一个元素。
顺便说一下,您应该使用OrderBy
annotation,否则必须将订单视为未定义。 (尽管实际上,您通常会按照插入顺序获取元素。)
答案 1 :(得分:0)
我现在在TWIG解决了。但这根本不好......我会在控制器内部而不是在VIEW中优先考虑解决方案。
{% for log in last_userlog|reverse if(log.user.Id == user.Id) %}
{% if loop.index == 1 %}
{{ log.logTitle }}
{% endif %}
{% endfor %}