Symfony2只获得1行oneToMany实体

时间:2014-08-24 16:29:10

标签: php entity-framework symfony

我有一个用户实体和一个日志实体。我有一个从用户到日志的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;

2 个答案:

答案 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 %}