Доктрина двунаправленной ассоциации ошибок.Память исчерпана - PullRequest
0 голосов
/ 06 октября 2018

У меня есть две доктрины школа и школаLocation в Zend Framwork

школа

/**
 * @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 голосов
/ 08 октября 2018

Когда вы используете 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 вместо печати, это имеет много преимуществ.В вашем случае это позволит вам легко проверить круговое соотношение.

...