我的汽车对象有许多carhisto对象。我做了实施,但是总是出了问题,因为我有一个无限循环...
这是模型:
class Car {
/**
* One Car has Many CarHistos.
* @ORMOneToMany(targetEntity="CarHisto", mappedBy="Car")
*/
private $CarHistos;
public function __construct()
{
$this->CarHistos = new ArrayCollection();
}
}
class CarHisto
{
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="Car", inversedBy="CarHistos")
* @ORMJoinColumn(name="car_id", referencedColumnName="id")
*/
private $Car;
}
我已经检查了四次,我再次阅读了学说页面,Symfony页面和要点。
但是我看不出>或 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":"SymfonyComponentConsoleCommandCommand":private]=>
NULL
["synopsis":"SymfonyComponentConsoleCommandCommand":private]=>
array(0) {
}
["usages":"SymfonyComponentConsoleCommandCommand":private]=>
array(0) {
}
["helperSet":"SymfonyComponentConsoleCommandCommand":private]=>
object(SymfonyComponentConsoleHelperHelperSet)#423 (2) {
["helpers":"SymfonyComponentConsoleHelperHelperSet":private]=>
array(4) {
["formatter"]=>
object(SymfonyComponentConsoleHelperFormatterHelper)#415 (1) {
["helperSet":protected]=>
*RECURSION*
}
["debug_formatter"]=>
object(SymfonyComponentConsoleHelperDebugFormatterHelper)#414 (4) {
["colors":"SymfonyComponentConsoleHelperDebugFormatterHelper":private]=>
array(9) {
[0]=>
string(5) "black"
[1]=>
string(3) "red"
和其他Symfony PHP文件的内容也在循环中。
我确定问题是Car
类中的$CarHistos
属性。因为当我删除汽车的该属性时,臭名昭著的问题没有再次发生,我可以在var_dump中看到一个汽车对象。
由命令运行的synccarhisto函数,所以我认为这就是为什么在var_dump中看到的命令符号类。
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.');
}
}
您在映射中看到我的错误,还是在其他地方?(这个无限循环...(
var_dump
本身正在引起这一点。这并不是要用于大型参考图/循环参考的调试工具。持续存在的学说实体包含很多参考,其中一些可能是Circullar。
改用var_dump($carList[0]->getId());
。或var_dump(count($carList));
您也可以尝试Symfony的Dumper,懒惰的对象。
并帮自己一个忙,开始使用适当的调试器。任何IDE都有能力,即使是记事本 。检查映射是否有效使用:
bin/console doc:sch:val