获取Collection中的最后一个元素

问题描述 投票:2回答:2

我正在尝试在集合中的最后一个元素上获取属性。我试过了

end($collection)->getProperty()

$collection->last()->getProperty()

没有用

(告诉我,我正在尝试在布尔值上使用getProperty())。

/**
 * Get legs
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getLegs()
{
    return $this->aLegs;
}

public function getLastlegdate()
{
    $legs = $this->aLegs;

    return $legs->last()->getStartDate();
}

知道为什么吗?

php symfony collections doctrine doctrine-collection
2个回答
5
投票

您遇到的问题是因为集合是空的。在内部last()方法使用end() php函数,from the doc

返回最后一个元素的值,或返回空数组的FALSE。

所以改变你的代码如下:

$property = null

if (!$collection->isEmpty())
{
$property =  $collection->last()->getProperty();
}

希望这个帮助


0
投票

这个$collection->last()->getProperty()打破了得墨忒耳的法则。该功能应该只有一个责任。试试这个。

/**
 * @return Leg|null
 */
public function getLastLeg(): ?Leg
{
   $lastLeg = null;
   if (!$this->aLegs->isEmpty()) {
     $lastLeg = $this->aLegs->last();
   }
   return $lastLeg;
}

/**
 * @return \DateTime|null
 */
 public function getLastLegDate(): ?\DateTime
 {
   $lastLegDate = null;
   $lastLeg = $this->getLastLeg();
   if ($lastLeg instanceOf Leg) {
     $lastLeg->getStartDate();
   }

   return $lastLegDate;
 }
© www.soinside.com 2019 - 2024. All rights reserved.