Doctrine ArrayCollection匹配条件函数导致未定义属性:MyEntity::$1(Symfony 3.4)

Doctrine ArrayCollection匹配条件函数导致未定义属性:MyEntity::$1(Symfony 3.4),doctrine,criteria,symfony-3.4,arraycollection,doctrine-collection,Doctrine,Criteria,Symfony 3.4,Arraycollection,Doctrine Collection,我将实体“TrainingProgressEntry”定义为@ORM\实体和“training”属性,如下所示: /** * @ORM\ManyToOne(targetEntity="Training", inversedBy="training_progress") * @ORM\JoinColumn(name="training_id", referencedColumnName="id") */ protected $training; 匹配的@ORM\Entity“Trainin

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

/**
 * @ORM\ManyToOne(targetEntity="Training", inversedBy="training_progress")
 * @ORM\JoinColumn(name="training_id", referencedColumnName="id")
 */
protected $training;
匹配的@ORM\Entity“Training”定义了一个属性“Training\u 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”:

来自

vendor\doctrine\collections\lib\Doctrine\Common\Collections\Expr\ClosureExpressionVisitor.php
尝试“返回$object->$field”时

跟踪显示它是由行中的上述函数“GetTrainingProgressInCeStart()”引起的

return $this->getTrainingProgress()->matching($criteria);
由于某些原因,匹配函数似乎无法识别。。。 我现在真的不知道该找什么。
任何提示都是非常受欢迎的。

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

方法: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\u 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);
}

来源:

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

方法: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\u 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);
}

来源:

谢谢你,伙计。事实上,我并没有解决它,而是手工排序。这好多了:-)谢谢你,伙计。事实上,我并没有解决它,而是手工排序。这是更好的:-)