问题描述
<?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并逐个影响每个属性的查询!
解决方法
默认情况下,这种关系处于延迟加载状态。因此,由于您没有调用汽车对象的任何吸气剂,因此只显示了ID(因为它也存储在预订对象中)。 但这仅是在转储的上下文中,一旦您尝试使用汽车的吸气剂(getId除外),它将加载其余的。
如果您确实需要将整个汽车数据与预订数据一起加载,可以在ManyToOne关系中使用fetch="EAGER"
,但是您需要有充分的理由这样做。