Symfony, перебирающий ArrayCollection - PullRequest
       6

Symfony, перебирающий ArrayCollection

0 голосов
/ 13 сентября 2018

В моем приложении 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;
        }
    }
}

Но я получаю следующую ошибку: Ошибка: вызов функции-члена getRoom () со значением NULL

Когда я вызываю ее с помощью $user->getActiveBooking()->getRoom()->getId()

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Убедитесь, что у пользователя, с которым вы работаете, есть активное бронирование.

getActiveBooking() возвращает значение NULL, так как кажется, что у пользователя нет активного бронирования.

Вот почему вы получаете сообщение об ошибке, что вы не можете вызвать getRoom() для null, поскольку предыдущая функция возвратила null.

0 голосов
/ 13 сентября 2018

Вы пытались добавить joinColumn так:

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