2015-07-24 2 views
3

Я объект под названием «Машина» с объединением в Entity «Событие»Symfony2 Учение Критерии

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

В шаблоне веточку я итерацию над «Machine» сущностей

{% 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 :: машине с не-объектным значением. Соответствующие объекты по идентификатору не совместим с совпадающими по коллекции в памяти, который сравнивает объекты по ссылке.»

Что я делаю неправильно?

ответ

6

Вы должны заменить

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

с

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

Поскольку machine это отношение и доктрина необходимо использовать объект, а не его идентификатор.

Смежные вопросы