0

我将实体“TrainingProgressEntry”定义为@ORM\Entity 和“培训”属性,如下所示:

/**
 * @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);

由于某种原因,似乎无法识别匹配功能或某些东西......我现在真的不知道要寻找什么。任何提示都非常受欢迎。

4

1 回答 1

2

您可能已经解决了这个问题,但我会以任何一种方式回答它以供其他人参考。

方法:orderBy of criteria 接受一个数组,其中键是字段,排序顺序是值,所以你有:

/**
 * @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);
}

来源:https ://github.com/doctrine/collections/blob/c23e14f69b6d2d1d1e389bc8868500efc447af7b/lib/Doctrine/Common/Collections/Criteria.php#L152

于 2019-04-26T16:05:41.443 回答