Я определил Entity "TrainingProgressEntry" как @ORM\Entity и свойство "обучения", например:
/**
* @ORM\ManyToOne(targetEntity="Training", inversedBy="training_progress")
* @ORM\JoinColumn(name="training_id", referencedColumnName="id")
*/
protected $training;
Соответствие @ORM\Entity «Обучение» определяет свойство «обучение_прогресс», например
/**
* @ORM\OneToMany(targetEntity="TrainingProgressEntry", mappedBy="training", cascade={"remove"})
* @ORM\OrderBy({"entry_date" = "ASC"})
*/
protected $training_progress;
и метод получения для него, как это
/**
* Get trainingProgress
*
* @return \Doctrine\Common\Collections\ArrayCollection
*/
public function getTrainingProgress()
{
return $this->training_progress;
}
Наконец, я определяю метод получения, предназначенный для возврата только записей, которые имеют дату более новую, чем некоторая исходная дата:
/**
* @return \Doctrine\Common\Collections\ArrayCollection
*/
public function getTrainingProgressSinceStart()
{
$startTime = $this->getUser()->getStart();
$criteria = Criteria::create()
->andWhere(Criteria::expr()->gt('entry_date', $startTime))
->orderBy(['entry_date', 'ASC']);
return $this->getTrainingProgress()->matching($criteria);
}
При использовании этой последней функции я получаю следующее "ContextErrorException":
Notice: Undefined property: AppBundle\Entity\TrainingProgressEntry::$1
приходящий из
vendor\doctrine\collections\lib\Doctrine\Common\Collections\Expr\ClosureExpressionVisitor.php
при попытке «вернуть $object->$field».
Трассировка показывает, что это вызвано упомянутой выше функцией "getTrainingProgressSinceStart()" в строке
return $this->getTrainingProgress()->matching($criteria);
По какой-то причине функция сопоставления не распознается или что-то в этом роде... Я действительно не знаю, что искать сейчас. Любые подсказки очень приветствуются.