我将实体“ TrainingProgressEntry”定义为@ORM \ Entity,并定义了“ training”属性,如下所示:
/**
* @ORM\ManyToOne(targetEntity="Training", inversedBy="training_progress")
* @ORM\JoinColumn(name="training_id", referencedColumnName="id")
*/
protected $training;
匹配的@ORM \ Entity“培训”定义了属性“ training_progress”,例如
/**
* @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;
}
最后,我定义了一个getter方法,该方法旨在仅返回日期比某个参考日期新的条目:
/**
* @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);
出于某种原因,似乎无法识别匹配功能或其他原因... 我真的不知道现在要寻找什么。 任何提示都非常欢迎。
答案 0 :(得分:1)
您可能已经解决了这个问题,但是我会以任何一种方式回答,以供其他人参考。
方法:条件的orderBy接受一个数组,其中键为字段,排序顺序为值,所以您在这里:
/**
* @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);
}
它确实应该是['entry_date'=>'ASC']:
/**
* @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);
}