我有Car对象,它有很多CarHisto对象。我做了实现,但总会出错,因为我得到了一个无限循环......
以下是模型:
class Car {
/**
* One Car has Many CarHistos.
* @ORM\OneToMany(targetEntity="CarHisto", mappedBy="Car")
*/
private $CarHistos;
public function __construct()
{
$this->CarHistos = new ArrayCollection();
}
}
class CarHisto
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Car", inversedBy="CarHistos")
* @ORM\JoinColumn(name="car_id", referencedColumnName="id")
*/
private $Car;
}
我已经检查了四次,我再次阅读了doctrine page,symfony page和一个要点。
但我不知道 manytoone 或 onetomany 映射中的无限循环是什么原因。
此代码中出现此问题:
public function syncCarHistos() {
CarList = $this->em->getRepository(Car::class)->findAll();
if (empty($CarList))
$this->logger->warning('Car list is empty!');
var_dump($CarList[0]);die;
// other stuff...
}
当var_dump调用时,会创建一个无限循环,而我所看到的并不是那么好看。 我看到每个php文件的内容!
像这样:
["code":"Symfony\Component\Console\Command\Command":private]=>
NULL
["synopsis":"Symfony\Component\Console\Command\Command":private]=>
array(0) {
}
["usages":"Symfony\Component\Console\Command\Command":private]=>
array(0) {
}
["helperSet":"Symfony\Component\Console\Command\Command":private]=>
object(Symfony\Component\Console\Helper\HelperSet)#423 (2) {
["helpers":"Symfony\Component\Console\Helper\HelperSet":private]=>
array(4) {
["formatter"]=>
object(Symfony\Component\Console\Helper\FormatterHelper)#415 (1) {
["helperSet":protected]=>
*RECURSION*
}
["debug_formatter"]=>
object(Symfony\Component\Console\Helper\DebugFormatterHelper)#414 (4) {
["colors":"Symfony\Component\Console\Helper\DebugFormatterHelper":private]=>
array(9) {
[0]=>
string(5) "black"
[1]=>
string(3) "red"
其他Symfony php文件的内容也在循环中。
我确定问题出在$CarHistos
类的Car
属性中。
因为当我删除Car的那个属性时,没有再发生这个infinty问题,我只能在var_dump中看到一个Car objectum。
syncCarHisto函数由命令运行,所以我认为这就是var_dump中看到Command Symfony类的原因。
class CarHistoSyncCommand extends Command
{
private $CarService;
public function __construct(CarService $CarService)
{
$this->CarService = $CarService;
parent::__construct();
}
protected function configure()
{
parent::configure();
$this->setName('app:car-histo-sync');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln(['Car Histo Sync', '=====================']);
$this->CarService->syncCarHisto();
$output->writeln('Car Histo Sync - Finished.');
}
}
你在映射中看到我的错误,还是在其他地方? (这个无限循环......)
答案 0 :(得分:1)
var_dump
本身正在造成这种情况。它并不意味着是一个非常大的参考图的调试工具。持久的Doctrine实体包含很多引用,其中许多都是圆形的。
请尝试使用var_dump($carList[0]->getId());
。或var_dump(count($carList));
并帮自己一个忙,并开始使用适当的调试器。任何IDE都有能力,甚至是Notepad ++。要检查映射是否有效,请使用:
bin/console doc:sch:val