我有一个用户实体和一个日志实体。我有一个从用户到日志的OneToMany连接。"我的日志表"中按用户存储的日志项。
我输出一个用户列表:
控制器:
$user = $this->getDoctrine()
->getRepository('SeotoolMainBundle:User')
->findBy(array('isActive' => 1, 'isAdmin' => 0));
树枝> {% for user in list_user %}
{{ user.username }}
{% endfor %}
现在我想接收日志表的一行,按一个名为"日期"的字段排序,并像这样在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;
假设您访问Log
Collection对象的getter是getLogMessages
方法,并且假设您可以使用getMessage
方法访问日志消息,下面应该解决这个问题:
{{ User.getLogMessages().last().getMessage() }}
last
方法允许您访问存储在集合中的最后一个元素。
OrderBy
注释,否则必须认为顺序未定义。(尽管在现实中,您通常会按照插入的顺序获得元素)。
我现在在TWIG中解决了它。但这一点都不好……我更喜欢控制器内部的解决方案,而不是在视图中。
{% for log in last_userlog|reverse if(log.user.Id == user.Id) %}
{% if loop.index == 1 %}
{{ log.logTitle }}
{% endif %}
{% endfor %}