Codeception / Codeception/module-doctrine

Memory Overflow at Doctrine Module with related entities

Ouverte
#22 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
PHP
Étoiles
4
Forks
2
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
php
Domaine
databases, testing
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.