Symfony:如何从与 oneToMany 关系相关的实体中获取所有对象数据

Symfony : How to fetch all object data from entity related with oneToMany relationship

我有与 oneToMany 关系相关的“汽车”和“预订”实体:

<?php

namespace App\Entity;
    
/**
 * @ORM\Entity(repositoryClass=CarRepository::class)
 * @UniqueEntity("registrationNumber")
 * @Vich\Uploadable
 */

class Car
{

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\Length(min=3, max=9)
     */
    private $registrationNumber;

    /**
     * @ORM\OneToMany(targetEntity=Booking::class, mappedBy="car")
     */
    private $bookings;

/**
     * @return Collection|Booking[]
     */
    public function getBookings(): Collection
    {
        return $this->bookings;
    }

}

<?php

namespace App\Entity;

/**
 * @ORM\Entity(repositoryClass=BookingRepository::class)
 */
class Booking
{
    const STATUS = [
        0 => 'Pending',
        1 => 'Canceled',
        2 => 'Confirmed',
        3 => 'Approved',
    ];


    public function  __construct()
    {
        $this->request_date = new \DateTime('now');
    }


    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    
    /**
     * @ORM\ManyToOne(targetEntity=Car::class, inversedBy="bookings")
     * @ORM\JoinColumn(nullable=false)
     */
    private $car;

    /**
     * @ORM\Column(type="string", length=255, options={"default": "Pending"})
     */
    private $status = self::STATUS[0];

    
    public function getCar(): ?Car
    {
        return $this->car;
    }

    public function setCar(?Car $car): self
    {
        $this->car = $car;

        return $this;
    }

    public function getStatus(): ?string
    {
        return $this->status;
    }

    public function getBookingStatus(): ?string
    {
        return self::STATUS[$this->status];
    }

    public function setStatus(string $status): self
    {
        $this->status = $status;

        return $this;
    }
 
}

public function book(Request $request, Car $car)
    {
        $booked_car = $car;
        $booking = new Booking();
        $booking->setCar($booked_car);
        $form = $this->createForm(BookingType::class, $booking);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()){
            $booking = $form->getData();
            $this->em->persist($booking);
            $this->em->flush();
            $this->addFlash('success', 'Démande envoyée avec success');

            return $this->redirectToRoute('car.index');
        }
        $this->addFlash('error', 'une erreur dans le système');
        return $this->render('booking/book.html.twig',[
            'booking' => $booking,
            'form' => $form->createView()
        ]);
    }

当dump $booking 变量到twig 或列出所有预订的索引页时,booking 对象中的每个car 对象只有id 字段,其他为空!我想获取与预订相关的汽车对象的每个字段,以便在树枝视图中显示它!在方法书中,我获取了随请求发送的 id 变量,并将其与 setCar 方法一起使用,我是否应该创建一个查询来搜索 byId 并逐个影响每个属性!!

这种关系默认是懒加载的。因此,由于您没有调用 car 对象的任何 getter,因此您只显示了 id(因为它也存储在 booking 对象中)。 但这仅在转储的上下文中,一旦您尝试使用汽车的 getter(getId 除外),它将加载其余部分。

如果您确实需要将整个汽车数据与预订数据一起加载,您可以在 ManyToOne 关系中使用 fetch="EAGER",但您需要有正当理由才能这样做。