Codeception / Codeception/module-doctrine

Memory Overflow at Doctrine Module with related entities

オープン
#22 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
PHP
スター
4
フォーク
2
PR マージ指標
30日以内にマージされた PR はありません

説明

If an entity is on the `1` side of a `1:n` relationship (i.e. it has `oneToMany`), and I handle it with the Doctrine Module, the object gets infinitely large, thereby causing a PHP memory overflow.

### Details

I've set up these two entities:
```yml
AppBundle\Entity\TestGroup:
type: entity
table: test_group

id:
id:
type: integer
generator:
strategy: IDENTITY

fields:
name:
type: string
length: 50
nullable: true

oneToMany:
test_user:
targetEntity: TestUser
mappedBy: test_group
```

```yml
AppBundle\Entity\TestUser:
type: entity
table: test_user

id:
id:
type: integer
generator:
strategy: IDENTITY

fields:
group_id:
type: integer
nullable: true
name:
type: string
length: 50
nullable: true

manyToOne:
test_group:
targetEntity:
inversedBy: test_user
joinColumn:
name: group_id
referencedColumnName: id
```
Now I run this functional test:
```php
public function tryMemoryLeak (FunctionalTester $I)
{
$group = new \AppBundle\Entity\TestGroup();
var_dump($group);
$I->persistEntity($group);
die;
var_dump($group);
}
```
Result: The output from `var_dump` is normal; and the entity exists in the database. But as soon as I remove `die;` the bug occurs: I get endless (i.e. hundreds or thousands of lines) output in the console. The same happens if I fetch the entity from the database with `$I->grabEntityFromRepository`.
This explains what I initially observed: If I try to pass the object to some function, I get a memory overflow crash from PHP.

I've tried it with SQLite and PostgreSQL.

If I do the same with the `TestUser` entity, everything is normal. So I'm figuring it has something to do with the `oneToMany` setting.

And if I do it in a controller, everything is fine too - so I'm figuring there's no error in the entities.

### Setup

* Codeception version: 2.3.5
* PHP Version: 7.1
* Operating System: Windows 10

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

Start with the functional test using persistEntity and grabEntityFromRepository, then inspect how the Doctrine module handles entities with oneToMany relationships. Compare the TestGroup and TestUser cases with the controller behavior; done means related entities no longer produce recursive output or a memory overflow.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
php
領域
databases, testing
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
30/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。