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




Вы пробовали добавить joinColumn следующим образом:
/**
* @ORM\ManyToOne(targetEntity = "App\Entity\User", inversedBy = "bookings")
* @ORM\JoinColumn(name = "user_id", referencedColumnName = "id", nullable=false)
*/
private $user;
Хорошо. Вы пытались проверить, правда ли ваше «если»? foreach ($ this-> бронирования как $ booking) {if ($ booking-> getIsActive ()) {die ("это правда по крайней мере один раз"); }}
Убедитесь, что у пользователя, с которым вы работаете, есть активное бронирование.
getActiveBooking() возвращает null, потому что кажется, что у пользователя нет активного бронирования.
Вот почему вы получаете сообщение об ошибке, что вы не можете вызвать getRoom() на null, потому что предыдущая функция вернула null.
Спасибо, я проверил базу данных, в поле is_active установлено значение 1
И user_id - это тот же идентификатор, что и у пользователя, которого вы используете? Вы пробовали использовать dump с пользователем и проверять ассоциации?
Спасибо за ответ, но отношение $ user уже присутствует в объекте бронирования.