Symfony2学说标准

时间:2015-07-24 17:17:03

标签: symfony doctrine-orm

我有一个名为“机器”的实体,与实体“事件”

有关联
/**
 * @var ArrayCollection
 *
 * @ORM\OneToMany(targetEntity="Event", mappedBy="machine", fetch="EXTRA_LAZY", cascade={"persist", "remove"})
 */
private $events;

在我的twig模板中,我迭代“机器”实体

{% for machine in machines %}
    <tr>
        <td>{{ machine.name }}</td>
        <td>{{ machine.lastEvent.value }}</td>
    </tr>
{% endfor %}

我想为每台机器获取最后一个事件

/**
 * Get machine current event value
 *
 * @return Event
 */
public function getLastEvent()
{
    $expression = Criteria::expr()
        ->eq('machine', $this->id);

    $criteria = Criteria::create()
        ->setMaxResults(1)
        ->where($expression)
        ->orderBy(['id' => 'DESC']);

    return $event = $this
        ->getEvents()
        ->matching($criteria)
        ->first();
}

执行时我收到此错误:

“在ApiBundle \ Entity \ Event :: machine上无法与非对象值匹配。通过id匹配对象与内存集合上的匹配不兼容,内存集合通过引用比较对象。”

我做错了什么?

1 个答案:

答案 0 :(得分:6)

你必须替换

$expression = Criteria::expr()
        ->eq('machine', $this->id);

$expression = Criteria::expr()
        ->eq('machine', $this);

因为machine是关系,而且Doctrine需要使用实体而不是ID。