Symfony遍历ArrayCollection

时间:2018-09-12 21:41:23

标签: symfony doctrine-orm

在我的应用中,我有2个实体;用户和预订。

预订实体:

namespace App\Entity;

/**
 * @ORM\Table(name="booking")
 * @ORM\Entity(repositoryClass="App\Repository\BookingRepository")
 */
class Booking
{
/**
 * @ORM\Column(type="boolean")
 * @Assert\NotBlank()
 */
private $isActive;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="bookings")
 */
private $user;

用户实体:

/**
 * @ORM\Table(name="app_user")
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity(fields="email", message="This email address is already in use")
 */
class User implements AdvancedUserInterface
{

/**
 * @ORM\Column(type="string", length=255, unique=true)
 * @Assert\NotBlank()
 * @Assert\Email()
 */
private $email;

/**
 * @ORM\OneToMany(targetEntity="App\Entity\Booking", mappedBy="user")
 * @Expose
 */
private $bookings;

/**
 * User constructor.
 */
public function __construct()
{
    $this->bookings = new ArrayCollection();
}

我试图向用户实体添加一个返回活动预订的函数,我对此进行了尝试:

/**
 * @return mixed
 */
public function getActiveBooking()
{
    foreach( $this->bookings as $booking ) {
        if( $booking->getIsActive() ) {
            return $booking;
        }
    }
}

但是出现以下错误:错误:在null上调用成员函数getRoom()

当我使用$user->getActiveBooking()->getRoom()->getId()

调用它时

2 个答案:

答案 0 :(得分:1)

确保与您一起工作的用户已预订。

getActiveBooking()返回空值,因为似乎用户没有有效的预订。

这就是为什么会出现错误,导致您无法在getRoom()上调用null的原因,因为先前的函数已返回null

答案 1 :(得分:0)

您是否尝试过像这样添加joinColumn:

 /**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="bookings")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
 */
private $user;