我将实体“TrainingProgressEntry”定义为@ORM \ Entity和“training”属性,如下所示:
/**
* @ORM\ManyToOne(targetEntity="Training", inversedBy="training_progress")
* @ORM\JoinColumn(name="training_id", referencedColumnName="id")
*/
protected $training;
匹配的@ORM \ Entity“Training”定义了一个属性“training_progress”
/**
* @ORM\OneToMany(targetEntity="TrainingProgressEntry", mappedBy="training", cascade={"remove"})
* @ORM\OrderBy({"entry_date" = "ASC"})
*/
protected $training_progress;
和像这样的getter方法
/**
* 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);
出于某种原因,匹配功能似乎没有得到认可......我真的不知道现在要找什么。任何提示都非常受欢迎。
你可能已经解决了这个问题,但我会以其他人的方式回答它。
方法:orderBy of criteria接受一个带Key的数组,即字段,排序顺序是值,所以你有:
/**
* @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);
}