Symfony-Doctrine映射导致无限循环



我的汽车对象有许多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

相关内容

  • 没有找到相关文章

最新更新