Symfony перебирает ArrayCollection

В моем приложении у меня есть 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 () при нулевом значении.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
62
2

Ответы 2

Вы пробовали добавить joinColumn следующим образом:

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

Спасибо за ответ, но отношение $ user уже присутствует в объекте бронирования.

Shaun 13.09.2018 00:04

Хорошо. Вы пытались проверить, правда ли ваше «если»? foreach ($ this-> бронирования как $ booking) {if ($ booking-> getIsActive ()) {die ("это правда по крайней мере один раз"); }}

Gaspar Teixeira 13.09.2018 00:40

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

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

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

Спасибо, я проверил базу данных, в поле is_active установлено значение 1

Shaun 13.09.2018 00:31

И user_id - это тот же идентификатор, что и у пользователя, которого вы используете? Вы пробовали использовать dump с пользователем и проверять ассоциации?

Chip Dean 13.09.2018 00:33

Другие вопросы по теме