Codeception / Codeception/module-doctrine
Memory Overflow at Doctrine Module with related entities
- 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