Codeception / Codeception/module-doctrine

Memory Overflow at Doctrine Module with related entities

Open
#22 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
4
Forks
2
PR merge metrics
No merged PRs in 30d

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

Contributor guide

No contributing guide indexed for this repository

Research direction

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.

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
databases, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.