教义双向关联错误。内存耗尽

时间:2018-10-06 11:42:43

标签: doctrine-orm zend-framework3

我在zend框架中有两个学说实体 school schoolLocation

学校实体

/**
 * @var schoolLocation
 * 
 * @ORM\OneToMany(targetEntity="\School\Entity\SchoolLocation", mappedBy="school", cascade={"persist","remove"})
 * 
 */
protected $schoolLocation;

schoolLocation实体

/**
 * @var school
 *
 * @ORM\ManyToOne(targetEntity="\School\Entity\School", inversedBy="schoolLocation")
 * @ORM\JoinColumn(name="school_id", referencedColumnName="id")
 */
protected $school;

我已经显示了双向关联。现在,每当我尝试获取school_location

$schoolLocation = $this->entityManager->getRepository(SchoolLocation::class)->findAll();

print_r($schoolLocation)我收到以下错误消息:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65015808 bytes) in F:\projects\test\module\School\src\Service\SchoolManager.php on line 190

有人可以帮助我告诉我,我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:0)

在具有圆形关系的对象上使用print_r时,它将继续打印该关系,直到内存用完为止。

class A {
    public $name = "class a";

    public $b;

    public function __construct(B $b) {
        $this->b = $b;
    }
}

class B {
    public $name = "class b";

    public $a;

    public function __construct() {
        $this->a = new A($this);
    }
}

print_r(new B);

此代码演示了正在发生的事情。显示的重新安装数量取决于您的PHP配置。

我建议使用Xdebug而不是打印,这有很多优点。根据您的情况,可以轻松检查圆形关系。