我有与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()
]);
}
当在列出所有预订的树枝或索引页面中转储$ booking变量时,预订对象中的每个汽车对象都只有id字段,其他则为null!我想获取与预订有关的汽车对象的每个字段的完整数据,以在树枝视图中显示它!在方法书中,我获得了随请求发送的id变量,并使用setCar方法将其放入,应该创建一个查询byId并逐个影响每个属性的查询!
答案 0 :(得分:1)
默认情况下,这种关系处于延迟加载状态。因此,由于您没有调用汽车对象的任何吸气剂,因此只显示了ID(因为它也存储在预订对象中)。 但这仅是在转储的上下文中,一旦您尝试使用汽车的吸气剂(getId除外),它将加载其余的。
如果您确实需要将整个汽车数据与预订数据一起加载,可以在ManyToOne关系中使用fetch="EAGER"
,但是您需要有充分的理由这样做。