[DDC-3865] [GH-1487] [DDC-3864] Support any ordering of fields in partial object query with embeddable Created: 04/Aug/15  Updated: 04/Aug/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of xxccdef:

Url: https://github.com/doctrine/doctrine2/pull/1487

Message:

Current implementation of partial object query with embeddables breaks when first attribute in field set is embeddable attribute:

```SELECT PARTIAL u.

{name.first, id}

FROM User```






[DDC-3864] Support any ordering of fields in partial object query with embeddable Created: 04/Aug/15  Updated: 04/Aug/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: DQL
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Egidijus Jucevičius Assignee: Guilherme Blanco
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Current implementation of partial object query with embeddables breaks when first attribute in field set is embeddable attribute:

SELECT PARTIAL u.{name.first, id} FROM User





[DDC-3863] Wrong return if value is null in JsonArrayType Created: 03/Aug/15  Updated: 03/Aug/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: 2.3, 2.4, Git Master, 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Baptiste Clavié Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: dbal, hydrator, orm, type


 Description   

On the JsonArray type, on the conversion from a database value to a php value, if the value is null or empty, it returns an empty array.

The thing is, I have a inherited field (or more specifically two fields with the same name, which is not in the parent entity (as another subentity doesn't need such a field).

Basically, it tries to load the field which appears two times (for a field name called `field`, it has two columns in the `data` array : `field_1` and `field_2`). The value for a entity has one of these null, respectively the `field_1` for the first subentity, and `field_2` for the second subentity.

The JsonArrayType then recognizes the field named `field` in the data, and returns an empty array if the value is null... Then doctrine stores in into cache, but when it comes to the second field (`field_2`), as it sees he has a cache for `field`, it ignores the value as the value is not null.

So basically, the problems lies within the JsonArrayType, which should return null if the value is null ? But I'm not quite sure if this is BC...

I was not sure if this belonged to the orm or the dbal.



 Comments   
Comment by Baptiste Clavié [ 03/Aug/15 ]

Implementation for master's branch





[DDC-3862] Doctrine\ORM\UnitOfWork::orphanRemovals is private Created: 03/Aug/15  Updated: 03/Aug/15  Resolved: 03/Aug/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Minor
Reporter: Erik van Velzen Assignee: Marco Pivetta
Resolution: Won't Fix Votes: 0
Labels: orphanRemoval, transactions


 Description   

This variable has no getter (e.g. getScheduledOrphanRemoval) unlike similar properties like Doctrine\ORM\UnitOfWork::entityDeletions.

It would be useful to me if this were exposed.



 Comments   
Comment by Marco Pivetta [ 03/Aug/15 ]

Exposing UoW internals is usually only leading to issues. Exposing it needs a strong use-case (that cannot be achieved otherwise) before being suggested.





[DDC-3861] Incorrect count in Paginator for queries using GROUP BY Created: 03/Aug/15  Updated: 03/Aug/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Przemyslaw Wrobel Assignee: Steve Müller
Resolution: Unresolved Votes: 0
Labels: None


 Description   

When using group by clause Paginator::count() method returns incorrect result. For example, the count metod produces the following query:
SELECT count(DISTINCT d0_.id) AS sclr_0 FROM diet_templates d0_ WHERE d0_.database_id = 3 AND d0_.type_id = 1
GROUP BY d0_.diet_id, d0_.day, d0_.meal_id

This query returns multiple records because it counts the number of records in groups and not the number of groups, eg. 1,1,1,2.
Since the count() method currently does array_sum like this:
$this->count = array_sum(array_map('current', $this->getCountQuery()->getScalarResult()));
The overall result is 5 (1+1+1+2) instead of 4.
When using group by clause the correct result whould be achived with a simple count on the result like this:
$this->count = count($this->getCountQuery()->getScalarResult());






[DDC-3860] PHP7 compatability issues Created: 03/Aug/15  Updated: 03/Aug/15  Resolved: 03/Aug/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Task Priority: Major
Reporter: Denis Chernosov Assignee: Marco Pivetta
Resolution: Invalid Votes: 0
Labels: php-7.0


 Description   

sstalle/php7cc (A command-line tool to check PHP 5.3 - 5.6 code compatibility with PHP 7) has been used

$ php bin/php7cc.php ../some_symfony_project

File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereConnection.php
Line 164. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereStatement.php
Line 214. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 244. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvStatement.php
Line 239. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 270. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvConnection.php
Line 93. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php
Line 88. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php
Line 90. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php
Line 211. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 241. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php
Line 112. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliStatement.php
Line 141. Possible array element creation during by-reference assignment: $this->_bindedValues[$param] =& $this->_values[$param];


File: ../some_symfony_project/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Expr.php
Line 53. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 72. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 271. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();



File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryBuilder.php
Line 473. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 501. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 779. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 805. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 838. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 872. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 899. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 965. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 981. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 1004. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/ExpressionBuilder.php
Line 74. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 93. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Connection.php
Line 144. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php
Line 904. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServerPlatform.php
Line 1021. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php
Line 108. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DrizzlePlatform.php
Line 56. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywherePlatform.php
Line 383. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connections/MasterSlaveConnection.php
Line 365. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php
Line 925. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php
Line 91. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();

File: ../some_symfony_project/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ExpressionBuilder.php
Line 45. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();
Line 55. Function argument(s) returned by "func_get_args" might have been modified: func_get_args();


File: ../some_symfony_project/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php
Line 293. Possible array element creation during by-reference assignment: $this->_resultPointers[$dqlAlias] =& $coll[$index];
Line 303. Possible array element creation during by-reference assignment: $this->_resultPointers[$dqlAlias] =& $coll[key($coll)];
                                                                 
  [PhpParser\Error]                                              
  Syntax error, unexpected '.', expecting T_VARIABLE on line 18  


 Comments   
Comment by Marco Pivetta [ 03/Aug/15 ]

Went through all these: no issues found, all false positives.

Please inspect them manually yourself before opening further issues via automated tools.





[DDC-3859] Overriding default identifier generation strategy has no effect on associations Created: 31/Jul/15  Updated: 31/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5, 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Grzegorz Szaliński Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: association, generator-strategy, orm
Environment:

Windows 7 Enterprise SP1, Symfony 2.7.2, Doctrine ORM 2.4.7, MySQL 5.6.12, PHP 5.5.0.



 Description   

Hello everyone,

I have an entity with custom ID generator strategy. It works flawlessly.
In some circumstances I have to override this strategy with a "handmade" Id. It works when the main entity is being flushed without associations. But it doesn't work with associations. This example error is thrown:

An exception occurred while executing 'INSERT INTO articles_tags (article_id, tag_id) VALUES (?, ?)' with params ["a004r0", 4]:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (sf-test1.articles_tags, CONSTRAINT FK_354053617294869C FOREIGN KEY (article_id) REFERENCES article (id) ON DELETE CASCADE)

This is when foreign keys are configured. For testing I deleted the foreign keys definitions manually. The result was no error, and the associated entity was saved with the foreign key generated based on the default generation strategy (loosing the actual associations). I posted more details on how to reproduce on StackOverflow: http://stackoverflow.com/q/31594338/709626.

I first found the issue using "pure" Doctrine 2.5.0. Then, while trying to debug, I reproduced it in Symfony 2.7.2.

Actually I'm not sure whether it's a bug or I am doing something not correctly. Also this is my first report here so please let me know if I should provide any more details.






[DDC-3858] Doctrine SLC and @version, failure to get optimistic lock Created: 31/Jul/15  Updated: 04/Aug/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Second Level Cache
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Dorrogeray Assignee: Fabio B. Silva
Resolution: Unresolved Votes: 0
Labels: SLC
Environment:

PHP 5.5.9, ubuntu



 Description   

Greetings everyone,

UPDATE: As a temporary workaround, I switched to the less performant READ_WRITE with the basic filelock implementation, and the problem went away.

I am using Doctrine 2.5 with SLC enabled (memcached) and I have encountered some strange behaviour. When doctrine fetches entities from cache, the @version column is actually set to NULL instead of whatever value is correctly in the database - looks like the @version doesn't get updated as far as cache is concerned.

Note that afected entity uses @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="Entity\Contact")

If I restart memcached, correct @version is loaded (because of the force reload).

This also leads to failure to get optimistic lock (due to incorrectly evaluated version mismatch).

I have no idea, but could this be somehow related to http://www.doctrine-project.org/jira/browse/DDC-3781 ?

For now, Ill try to prevent this issue from occurring by clearing updated entities from cache, and thus forcing their reload by whoever will request them next.

Thanks for any response/advice!

Here is part of call stack, this time failing on different entity, but for the same reason:

#0 /var/www/TravelSupport/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(483): Doctrine\ORM\OptimisticLockException::lockFailed(Object(DoctrineORMModule\Proxy_CG_\CsnTour\Entity\Customer))
#1 /var/www/TravelSupport/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(366): Doctrine\ORM\Persisters\Entity\BasicEntityPersister->updateTable(Object(DoctrineORMModule\Proxy_CG_\CsnTour\Entity\Customer), '`customer`', Array, true)
#2 /var/www/TravelSupport/vendor/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php(95): Doctrine\ORM\Persisters\Entity\BasicEntityPersister->update(Object(DoctrineORMModule\Proxy_CG_\CsnTour\Entity\Customer))
#3 /var/www/TravelSupport/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(1069): Doctrine\ORM\Cache\Persister\Entity\NonStrictReadWriteCachedEntityPersister->update(Object(DoctrineORMModule\Proxy_CG_\CsnTour\Entity\Customer))
#4 /var/www/TravelSupport/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(384): Doctrine\ORM\UnitOfWork->executeUpdates(Object(Doctrine\ORM\Mapping\ClassMetadata))
#5 /var/www/TravelSupport/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(356): Doctrine\ORM\UnitOfWork->commit(NULL)
#6 /var/www/TravelSupport/module/CsnTour/src/CsnTour/Controller/TicketController.php(2014): Doctrine\ORM\EntityManager->flush()



 Comments   
Comment by Fabio B. Silva [ 04/Aug/15 ]

Dorrogeray,
Can you please add a failing test case ?

If you need help to write the test you can use this ticket as a reference.





[DDC-3857] [GH-1485] Changed references from PHP6 to PHP7 Created: 31/Jul/15  Updated: 31/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of hasumedic:

Url: https://github.com/doctrine/doctrine2/pull/1485

Message:

Found a reference to PHP6 while reading the best practices docs.

While doing this tiny change, I also found a couple more references to it in the tests which I changed too.

If this is a funny reference to it, I'm happy for you to leave it as is. Otherwise, this PR replaces the existing references to PHP6 for PHP7 instead.






[DDC-3856] [GH-1484] Make exception message configurable for NoResultException Created: 31/Jul/15  Updated: 31/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of haeber:

Url: https://github.com/doctrine/doctrine2/pull/1484

Message:

Currently it's not possible to use a custom exception message for the NoResultException. It would be great to use a custom one. For example you can define what specific result was expected or with what query it was executed, let's say you want to find members with a select query. Then it would be great if the message could be 'No members found for query.', instead of the default message.

This change is backward compatible, because it checks for emptiness of the message, and only if it's not empty it uses the custom message. Furthermore it's now possible to loop the parameters $code and $prevision exception throw this NoResultException.






[DDC-3855] Inheritance JOINED, left select child entity retrieves not valid object Created: 30/Jul/15  Updated: 30/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: DQL, ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Gregory Pokrovsky Assignee: Guilherme Blanco
Resolution: Unresolved Votes: 0
Labels: DQL, Inheritance, Joined, Query,


 Description   

Delivery is child of inheritance parent Place. If delivery not set in query, result will have array of PlaceAddress entities, because PlaceAddress is a root alias, but when delivery added to select, then result will contain array of PlaceTypeDelivery but root alias stays PlaceAddress. Is this a bug?

$this->_em
->createQueryBuilder()
->select(['partial addresses.

{id,realAddress,phone}

','place','partial workday.

{id}','partial delivery.{id}

'])
->from('CommonBundle:PlaceAddress', 'addresses')
->leftJoin("addresses.place", "place", "WITH", "addresses.place = place.id")
->leftJoin("addresses.workday", "workday", "WITH", "workday.address = addresses.id")
->where("place INSTANCE OF CommonBundle:PlaceTypeDelivery")
->andWhere("place.enabled = 1");






[DDC-3854] [GH-1483] fix typo Created: 30/Jul/15  Updated: 30/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of longkey1:

Url: https://github.com/doctrine/doctrine2/pull/1483

Message:






[DDC-3853] [GH-1480] Allow custom id generators to handle composite keys Created: 28/Jul/15  Updated: 28/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of kaiwa:

Url: https://github.com/doctrine/doctrine2/pull/1480

Message:

Currently when using composite keys, any other id generation strategy than
NONE (assigned identifiers) is triggering an exception in ClassMetadataInfo.

This commit allows to use the CUSTOM strategy with composite keys, therefore
to allow a custom id generator to handle the composite key identifier
generation.






[DDC-3852] [GH-1479] Quoted field - yaml driver Created: 28/Jul/15  Updated: 29/Jul/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of bigfoot90:

Url: https://github.com/doctrine/doctrine2/pull/1479

Message:

Allow the usage of ```quoted``` field mapping option in yaml mappings

Example:
```
MyModel:
type: entity
fields:
values:
type: string
quoted: true
```






[DDC-3851] [GH-1478] attributeOverride on mappedSpuerclass YamlDriver Created: 27/Jul/15  Updated: 29/Jul/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of bigfoot90:

Url: https://github.com/doctrine/doctrine2/pull/1478

Message:

This allows the use of ```attributeOverride``` on a mappedSpuerclass yaml format.
Without this you have exception
```[Doctrine\ORM\Mapping\MappingException] Invalid field override named 'field' for class 'Acme\DemoBundle\Entity\Custom'```

replace of https://github.com/doctrine/doctrine2/pull/1477 beacause of wrong branch.






[DDC-3850] [GH-1477] attributeOverride on mappedSpuerclass YamlDriver Created: 27/Jul/15  Updated: 27/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of bigfoot90:

Url: https://github.com/doctrine/doctrine2/pull/1477

Message:

This allows the use of ```attributeOverride``` on a mappedSpuerclass yaml format.
Without this you have exception
```[Doctrine\ORM\Mapping\MappingException] Invalid field override named 'field' for class 'Acme\DemoBundle\Entity\Custom'```



 Comments   
Comment by Doctrine Bot [ 27/Jul/15 ]

A related Github Pull-Request [GH-1477] was closed:
https://github.com/doctrine/doctrine2/pull/1477





[DDC-3849] [GH-1476] Enhancement: Enable caching of dependencies between builds Created: 24/Jul/15  Updated: 25/Jul/15  Resolved: 25/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Duplicate Votes: 0
Labels: build-speed, cache, ci, composer, travis


 Description   

This issue is created automatically through a Github pull request on behalf of localheinz:

Url: https://github.com/doctrine/doctrine2/pull/1476

Message:

This PR

  • [x] enables caching of dependencies as installed with Composer between builds


 Comments   
Comment by Doctrine Bot [ 24/Jul/15 ]

A related Github Pull-Request [GH-1476] was closed:
https://github.com/doctrine/doctrine2/pull/1476





[DDC-3848] [GH-1475] Fix: Development dependencies are installed by default Created: 24/Jul/15  Updated: 25/Jul/15  Resolved: 25/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Duplicate Votes: 0
Labels: ci, composer, travis


 Description   

This issue is created automatically through a Github pull request on behalf of localheinz:

Url: https://github.com/doctrine/doctrine2/pull/1475

Message:

This PR

  • [x] removes the `--dev` option when installing dependencies, as `development` dependencies are installed by default


 Comments   
Comment by Doctrine Bot [ 24/Jul/15 ]

A related Github Pull-Request [GH-1475] was closed:
https://github.com/doctrine/doctrine2/pull/1475





[DDC-3847] [GH-1474] Fix: Remove unused imports Created: 24/Jul/15  Updated: 24/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of localheinz:

Url: https://github.com/doctrine/doctrine2/pull/1474

Message:

This PR

  • [x] removes apparently unused imports





[DDC-3846] [GH-1473] Docs fix ref and title Created: 24/Jul/15  Updated: 25/Jul/15  Resolved: 25/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Documentation Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: documentation, headers, rst


 Description   

This issue is created automatically through a Github pull request on behalf of ilyar:

Url: https://github.com/doctrine/doctrine2/pull/1473

Message:

Pretty Ref and Fixed WARNING: Duplicate explicit target name

/doctrine2/docs/en/changelog/migration_2_5.rst:2: WARNING: Duplicate explicit target name: "pull request".
/doctrine2/docs/en/changelog/migration_2_5.rst:2: WARNING: Duplicate explicit target name: "pull request".
/doctrine2/docs/en/changelog/migration_2_5.rst:2: WARNING: Duplicate explicit target name: "pull request".
/doctrine2/docs/en/changelog/migration_2_5.rst:2: WARNING: Duplicate explicit target name: "pull request".
/doctrine2/docs/en/changelog/migration_2_5.rst:2: WARNING: Duplicate explicit target name: "pull request".
/doctrine2/docs/en/changelog/migration_2_5.rst:2: WARNING: Duplicate explicit target name: "pull request".

Fixed WARNING: Title underline too short

/doctrine2/docs/en/reference/second-level-cache.rst:622: WARNING: Title underline too short.
/doctrine2/docs/en/reference/caching.rst:89: WARNING: Title underline too short.






[DDC-3845] Add logger to track information how much time hydration of entities was spent and how many entities was hydrated Created: 23/Jul/15  Updated: 23/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Dmytro Malyshenko Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: orm


 Description   

Maybe it worth to make a logger like Doctrine\DBAL\Logging which will track an information how much time was spent on a hydration of entities and how many entities were hydrated.

Because of lazy loading there could be hydrated a much more objects than it needed and it hard to track.

If a logger will be created, later in Symfony, for example, in doctrine/DoctrineBundle, it could be injected in Doctrine\ORM\Configuration and collected information might be displayed in a web profiler panel.

I've made a symfony bundle which implements the functionality - https://github.com/debesha/DoctrineProfileExtraBundle

Here https://github.com/debesha/DoctrineProfileExtraBundle/wiki I tried to explain why I think it is necessary.

If it will be considered to be worth to implement, I can make a coding myself and push it into hobodave/doctrine2.git






[DDC-3844] [GH-1472] Add test for MariaDB 5.5 and 10.1 on Travis Created: 23/Jul/15  Updated: 23/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of PowerKiKi:

Url: https://github.com/doctrine/doctrine2/pull/1472

Message:

This use the brand new supported addon mariadb (not yet officially announced).
This is unfortunately a bit verbose, but I don't think there is any
alternative because we cannot install the addon when testing against mysql
otherwise it would overwrite mysql install.






[DDC-3843] indexBy collection loses index key after calling a ->matching(criteria) on it Created: 22/Jul/15  Updated: 22/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Matteo Orefice Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: collection, orm
Environment:

Linux Debian (7.8) NGINX (1.8.0) PHP (5.5.25-1~dotdeb) MySQL (5.6.24-72.2)



 Description   

When I retrieve a filtered collection of entities which has indexBy attribute it loses index keys in the result. Before calling matching() method i tried to call toArray() and It solved the problem, I don't know if it is a bug .

class Entity {
/**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="Entity\Arcansel\BasketItem",mappedBy="userSession",indexBy="id",cascade={"persist","remove","merge"})
     */
    protected $basketItems;


// Some comments here
public function getBasketItems()
    {
        $date = DateTime::newDateTimeUniversal();
        $criteria = Criteria::create()->where(Criteria::expr()->gt("addTime",$date));
        // next line of code prevents returned collection to lose indexBy keys
        $a = $this->basketItems->toArray();
        return $this->basketItems->matching($criteria);
    }
}





[DDC-3842] [GH-1471] Platform built twice on closed connections Created: 21/Jul/15  Updated: 22/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: close, connection, platform


 Description   

This issue is created automatically through a Github pull request on behalf of guiwoda:

Url: https://github.com/doctrine/doctrine2/pull/1471

Message:

There is a loop when a closed connection is asked for its Database Platform, in which the resulting Platform object gets overwriten by a new one and all modifications made in the postConnect event is lost.

The commited test adds the event BEFORE the connection gets opened automatically by the OrmFunctionalTestCase setUp method. I know this is not a common test scenario, but I had to make this hack in order to reuse all the other FunctionalTestCase stuff.

I believe this only happens in Drivers that implement VersionAwarePlatformDriver, as I could not reproduce it with sqlite.

I believe what's happening is:

  • `Connection` tries to `detectPlatformDriver`
  • As connection is closed, `getDatabasePlatformVersion` tries to `$this->connect()` it
  • `Connection::connect()` has a `null` on `$this->platform` because it didn't finish detecting, so it tries to detect again
  • This time the connection is opened, so `detectPlatormDriver` succedes.
  • `Connection` fires the event
  • The rest of the first `detectPlatformDriver` call executes, overriding `$this->platform`

I was using the postConnect event to add types only when the connection is opened, instead of adding them every time I constructed the EntityManager, to prevent connections from being opened every time.






[DDC-3841] [GH-1470] [CI] Added dev requirement for "doctrine/coding-standard" Created: 20/Jul/15  Updated: 21/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Minor
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 1
Labels: CI, CS, Tools

Issue Links:
Reference
relates to DDC-585 Create a coding standards document Open

 Description   

This issue is created automatically through a Github pull request on behalf of phansys:

Url: https://github.com/doctrine/doctrine2/pull/1470

Message:

Q A
-------------
Bug fix? no
New feature? yes
BC breaks? no
Deprecations? no
Tests pass? yes
Fixed tickets
License MIT
Doc PR
  • Added dev requirement for ```doctrine/coding-standard```.
  • Updated Travis config in order to use the new requirement within
    ```before_script``` lifecycle.


 Comments   
Comment by Phansys [ 20/Jul/15 ]

Take this as a probe of the current status of the Doctrine's CS. IMO, we should decide how to proceed in order to get a clean codebase, and I think we should apply some tool like PHP-CS-Fixer or update PHP_CodeSniffer to 2.0 in order to achieve the same feature.

Ping @Ocramius.

Comment by Marco Pivetta [ 21/Jul/15 ]

Phansys I already replied on the PR: needs CS changes before merging, and other PRs take priority first.

Comment by Phansys [ 21/Jul/15 ]

Marco Pivetta, auto CS fixes aren't available with PHP_CodeSniffer at 1.x version (they are in yet unreleased 2.x); that is why I created this PR https://github.com/doctrine/doctrine2/pull/1460 using PHP-CS-fixer, while I've also added a rule for Doctrine's logical NOT CS: https://github.com/FriendsOfPHP/PHP-CS-Fixer/pull/1303.
IMO, at some point we should use any of these tools to ensure all the CS rules are respected.





[DDC-3840] [GH-1469] Fix version compare Created: 20/Jul/15  Updated: 20/Jul/15  Resolved: 20/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers, Tools
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Invalid Votes: 0
Labels: annotation, entityGenerator, generation, namespace, simplified-annotation


 Description   

This issue is created automatically through a Github pull request on behalf of brenodouglas:

Url: https://github.com/doctrine/doctrine2/pull/1469

Message:

Generate entity with '@ORM' annotation because comparison error.






[DDC-3839] EventListener not called when clearing a ManyToMany collection by reference Created: 20/Jul/15  Updated: 20/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4.7
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Jonathan Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: event, many-to-many

Attachments: File ManyToManyEventTest.php    

 Description   

I have an issue with a ManyToMany relation. I don't know if it is a bug or the normal behaviour but when I clear a ManyToMany relation of an entity with the following code :

$user->getGroups()->clear();

the event listener linked to my entity is not called when I flush the entity manager.

I have updated the test \Doctrine\Tests\ORM\Functional\ManyToManyEventTest in order to reproduce the issue (see file attached).






[DDC-3838] Add support for usig DTOs as constructor arguments Created: 18/Jul/15  Updated: 18/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Marcos Passos Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: dql


 Description   

I've a user case where I need to instantiate a DTO that requires use another DTO as argument:

SELECT NEW User(user.name, user.email, NEW Address(address.street, ...))

..

Today it's not possible and an exception is thrown:

[Syntax Error] line 0, col 95: Error: Unexpected 'NEW'





[DDC-3837] [GH-1468] Travis: Enable cache for composer Created: 17/Jul/15  Updated: 17/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of Majkl578:

Url: https://github.com/doctrine/doctrine2/pull/1468

Message:

Travis is now able to persist caches and reuse them in future builds. This could avoid re-downloading of stable packages (5 atm).
As @stof suggested in #1466, after removing `--prefer-source`, stable versions will be downloaded as an archive while dev versions will be still cloned by git directly.
More info in [Caching Dependencies and Directories](http://docs.travis-ci.com/user/caching/).






[DDC-3836] [GH-1467] switch/case with colon instead of semicolon Created: 17/Jul/15  Updated: 17/Jul/15  Resolved: 17/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Incomplete Votes: 0
Labels: syntax


 Description   

This issue is created automatically through a Github pull request on behalf of franziskahahn:

Url: https://github.com/doctrine/doctrine2/pull/1467

Message:

A semicolon is also correct ( http://php.net/manual/en/control-structures.switch.php "It's possible to use a semicolon instead of a colon after a case like: ") but there are colons on the other cases.



 Comments   
Comment by Doctrine Bot [ 17/Jul/15 ]

A related Github Pull-Request [GH-1467] was closed:
https://github.com/doctrine/doctrine2/pull/1467





[DDC-3835] [GH-1466] Travis: Switch to container-based infrastructure Created: 16/Jul/15  Updated: 16/Jul/15  Resolved: 16/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: build-speed, ci, sudo, travis


 Description   

This issue is created automatically through a Github pull request on behalf of Majkl578:

Url: https://github.com/doctrine/doctrine2/pull/1466

Message:

This PR migrates Travis builds to the new container-based infrastructure.
See [Using container-based infrastructure](http://docs.travis-ci.com/user/workers/container-based-infrastructure/) for details.






[DDC-3834] [GH-1465] Spl_object_hash conflict on Merge Created: 16/Jul/15  Updated: 28/Jul/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of moroine:

Url: https://github.com/doctrine/doctrine2/pull/1465

Message:

This is proper PR which was originally https://github.com/doctrine/doctrine2/pull/1461(https://github.com/doctrine/doctrine2/pull/1461)

Hi,

First of all, this is just a proposal and I'm sure there is a better solution for the problem described here. As this is my first hack into doctrine source code I'm not sure consequences that might be cause by my modification (even all unit tests passes).

I have encounter a problem due to spl_object_hash. I have written a functional test in order to reveal my issue.

The problem is when I merge an entity, here $user, UOW keep data on the original entity identified by it's spl_object_hash. Then if I unset this $user the spl_object_hash is now available for new object. So I experimented in my case reuse of previous hash which cause a managed+dirty entity error.

So I see two solutions

UOW keep reference to the entity given as even the given variable is unset there is remaining reference in UOW so the spl_hash will not be released.
Do not store data about the given entity, as merge operation isn't supposed to modified given entity.
I tried to implement the second solution as the first may consume a much more memory.

I don't why the merge operation need to do this, so I encapsulated it to prevent unwanted bug






[DDC-3833] [GH-1464] [DDC-3609] Syntax error in class table inheritance join when WITH is used in DQL query #1328 Created: 16/Jul/15  Updated: 16/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of sp-rhm:

Url: https://github.com/doctrine/doctrine2/pull/1464

Message:

I found that in SqlWalker::walkJoin(), it is using ON if the join type is LEFT or LEFT OUTER. That seems weird, because SqlWalker::walkRangeVariableDeclaration() always adds a JOIN with ON, even in the case of LEFT or LEFT OUTER join. Furthermore, the tests in SelectSqlGenerationTest seem to incorrectly check for the second ON to be present.

However, this change only fixes one of the tests by @adeanzan, the other two are still failing. So I don't know if my fix is correct.






[DDC-3832] readOnly should be renamed to immutable in the mapping Created: 16/Jul/15  Updated: 16/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers
Affects Version/s: None
Fix Version/s: 3.0

Type: Improvement Priority: Minor
Reporter: Christophe Coevoet Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: None


 Description   

readOnly in the mapping is currently very confusing. Some people are using it to map entities to views, and then complain about SchemaTool-based projects (migrations for instance) because it handles things as table.
But this is not the actual meaning of this mapping flag. Read-only entities can be inserted and deleted. The only forbidden action on them are updates. This makes the naming totally unsuited.

For reference, Hibernate uses "mutable=false" for the feature corresponding to our "readOnly=true".






[DDC-3831] [GH-1463] Fixed issue when paginator orders by a subselect expression Created: 16/Jul/15  Updated: 04/Aug/15  Resolved: 04/Aug/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: 2.5.1, 2.6.0
Security Level: All

Type: Bug Priority: Minor
Reporter: Doctrine Bot Assignee: Bill Schaller
Resolution: Fixed Votes: 0
Labels: oracle, orderBy, paginator, postgresql, sqlserver


 Description   

This issue is created automatically through a Github pull request on behalf of ehimen:

Url: https://github.com/doctrine/doctrine2/pull/1463

Message:

On platforms that support the ROW_NUMBER() OVER() function, we've found issues when ordering by a subselect expression. Have included a test demonstrating the problem that was failing with a syntax error under Postgres:

```
Caused by
PDOException: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "SELECT"
LINE 1: ...d = c0_.id) AS sclr_4, ROW_NUMBER() OVER(ORDER BY SELECT MAX...



 Comments   
Comment by Doctrine Bot [ 04/Aug/15 ]

A related Github Pull-Request [GH-1463] was merged:
https://github.com/doctrine/doctrine2/pull/1463





[DDC-3830] Duplicate unique index on OneToOne relation create Created: 16/Jul/15  Updated: 16/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Alexander Ivanov Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Should check if unique exists in Doctrine\ORM\Tools\SchemaTool:gatherRelationJoinColumns() method. Now $uniqueConstraints is set to empty array at the beginning of method, so new unique are force created even if unique on column already exists.






[DDC-3829] [GH-1462] Add a note to documentation for transactional()'s return values Created: 16/Jul/15  Updated: 16/Jul/15  Resolved: 16/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: 2.x
Fix Version/s: 2.6.0
Security Level: All

Type: Documentation Priority: Minor
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: documentation, entitymanager, legacy, limitations, transactional


 Description   

This issue is created automatically through a Github pull request on behalf of DHager:

Url: https://github.com/doctrine/doctrine2/pull/1462

Message:

Related to problems encountered in #1392.






[DDC-3828] Spl_object_hash conflict on Merge Created: 15/Jul/15  Updated: 15/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: 2.5.1
Security Level: All

Type: Bug Priority: Major
Reporter: Moroine Bentefrit Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: merge, orm, spl_object_hash, unitofwork


 Description   

I have created a PR: https://github.com/doctrine/doctrine2/pull/1461

Hi,

First of all, this is just a proposal and I'm sure there is a better solution for the problem described here. As this is my first hack into doctrine source code I'm not sure consequences that might be cause by my modification (even all unit tests passes).

I have encounter a problem due to spl_object_hash. I have written a functional test in order to reveal my issue.

The problem is when I merge an entity, here `$user`, UOW keep data on the original entity identified by it's spl_object_hash. Then if I unset this `$user` the spl_object_hash is now available for new object. So I experimented in my case reuse of previous hash which cause a `managed+dirty entity` error.

So I see two solutions

  • UOW keep reference to the entity given as even the given variable is unset there is remaining reference in UOW so the spl_hash will not be released.
  • Do not store data about the given entity, as merge operation isn't supposed to modified given entity.

I tried to implement the second solution as the first may consume a much more memory.

I don't why the merge operation need to do this, so I encapsulated it to prevent unwanted bug






[DDC-3827] [GH-1461] Spl_object_hash conflict on Merge Created: 15/Jul/15  Updated: 15/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of moroine:

Url: https://github.com/doctrine/doctrine2/pull/1461

Message:

Hi,

First of all, this is just a proposal and I'm sure there is a better solution for the problem described here. As this is my first hack into doctrine source code I'm not sure consequences that might be cause by my modification (even all unit tests passes).

I have encounter a problem due to spl_object_hash. I have written a functional test in order to reveal my issue.

The problem is when I merge an entity, here `$user`, UOW keep data on the original entity identified by it's spl_object_hash. Then if I unset this `$user` the spl_object_hash is now available for new object. So I experimented in my case reuse of previous hash which cause a `managed+dirty entity` error.

So I see two solutions

  • UOW keep reference to the entity given as even the given variable is unset there is remaining reference in UOW so the spl_hash will not be released.
  • Do not store data about the given entity, as merge operation isn't supposed to modified given entity.

I tried to implement the second solution as the first may consume a much more memory.

I don't why the merge operation need to do this, so I encapsulated it to prevent unwanted bug






[DDC-3826] [GH-1459] [Dependencies] Used semantic version constraint for "satooshi/php-coveralls" Created: 14/Jul/15  Updated: 20/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: composer, constraint, dependency, version


 Description   

This issue is created automatically through a Github pull request on behalf of phansys:

Url: https://github.com/doctrine/doctrine2/pull/1459

Message:

Q A
-------------
Bug fix? yes
New feature? no
BC breaks? no
Deprecations? no
Tests pass? yes
Fixed tickets
License MIT
Doc PR





[DDC-3825] simple_array slush with empty array Created: 14/Jul/15  Updated: 27/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.3, 2.4, 2.5
Fix Version/s: 2.3, 2.4, 2.5

Type: Bug Priority: Minor
Reporter: Damian Dlugosz Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: dbal


 Description   

I'm using "doctrine/orm": v2.5.0 and have simple_array type.
If I persist the class where the property with type simple_array is empty array() the query fails.

I'm coming with solution, please see the github PR https://github.com/doctrine/dbal/pull/877



 Comments   
Comment by Damian Dlugosz [ 27/Jul/15 ]

I've mapped the field as nullable=false, so it should never be null.
If you cannot merge this quickly, you should at least add an warning in the docs saying that the field must be mapped set as nullable.





[DDC-3824] [GH-1457] Updated syntax for "integer" and "boolean" types Created: 14/Jul/15  Updated: 16/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: Git Master
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Minor
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: CS, docblock, entityGenerator, generation


 Description   

This issue is created automatically through a Github pull request on behalf of phansys:

Url: https://github.com/doctrine/doctrine2/pull/1457

Message:

Q A
-------------
Bug fix? no
New feature? no
BC breaks? no
Deprecations? no
Tests pass? yes
Fixed tickets
License MIT
Doc PR

Used short syntax for ```integer``` and ```boolean``` types.

*Before*
```php
/**

  • @var integer
    *
  • @ORM\Column(name="some_integer_field", type="integer")
    */
    private $someIntegerField;

/**

  • @var boolean
    *
  • @ORM\Column(name="some_boolean_field", type="boolean")
    */
    private $someBooleanField;
    ```

*After*
```php
/**

  • @var int
    *
  • @ORM\Column(name="some_integer_field", type="integer")
    */
    private $someIntegerField;

/**

  • @var bool
    *
  • @ORM\Column(name="some_boolean_field", type="boolean")
    */
    private $someBooleanField;
    ```





[DDC-3823] [GH-1456] No-frills support for Entity version bumping Created: 14/Jul/15  Updated: 14/Jul/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 1
Labels: locking, persistence, versioned

Issue Links:
Reference
relates to DDC-3781 Fix Optimistic Locking Scenarios for ... Awaiting Feedback

 Description   

This issue is created automatically through a Github pull request on behalf of DHager:

Url: https://github.com/doctrine/doctrine2/pull/1456

Message:

A cut-down version of DDC-3640 / PR #1378

This PR focuses on the "support code", and does not contain any annotations or other mechanisms for knowing when an entity's version should be bumped in the absence of "direct" modifications. Instead, it provides a basic mechanism of:

$unitOfWork->scheduleForVersionBump($entity);
$unitOfWork->isScheduledForVersionBump();

This simple will allow advanced users can solve their problems with custom event-listeners, until someday when DDC-3781 defines an officially-sanctioned method for cascading version-changes across entities.






[DDC-3822] Nullable embeddables [Feature Request] Created: 13/Jul/15  Updated: 13/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Minor
Reporter: David Adams Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

I've noticed that when using embeddables that they are always created in the entity not matter what. For example, a User has a PhoneNumber(embeddable) and the PhoneNumber only has one field, "value". If it's reasonable for a User to not have a PhoneNumber in the system, then I don't believe a PhoneNumber instance should be created for the User entity when hydrated. If the value object's class has a __toString() method then you are forced to check if the value is null and if it is then return an empty string which is very hacky.

I propose to add a new "nullable" option to embeddables. If all of the columns that make up the embedded object are null then the embedded object should not be created if "nullable" is set to true.

Here's a gist illustrating the problem and the possible solution in yml.

https://gist.github.com/dadamssg/25714381e97220147ce2






[DDC-3820] [GH-1455] Update ExprTest.php Created: 13/Jul/15  Updated: 13/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of xoeoro:

Url: https://github.com/doctrine/doctrine2/pull/1455

Message:

expr()->countDistinct allows to create COUNT(DISTINCT) expression with mulltiple fields but parser requires only one field.

\Doctrine\ORM\Query\Parser::AggregateExpression

some body, please, fix this problem






[DDC-3819] [GH-1454] Add test for DDC-3818 - Paginator fails to retrieve entities linked with One-To-Many Created: 10/Jul/15  Updated: 10/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of odoucet:

Url: https://github.com/doctrine/doctrine2/pull/1454

Message:

Please see http://www.doctrine-project.org/jira/browse/DDC-3818

Reminder : using a DQL query with WHERE on a One-To-Many relationship fails to retrieve full object.

This went unseen in previous tests because cache is used to retrieve the originating object.






[DDC-3818] Paginator fails to retrieve entities linked with One-To-Many Created: 10/Jul/15  Updated: 16/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: Git Master, 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Olivier Doucet Assignee: Steve Müller
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This happens when you deal with entities with children as One-To-Many, and you perform a search on one of the child.
Let's use a real example :

a Company has 1,N Employees.
Data is the following :

Company

ID COMPANY NAME
1 ACME LTD
2 PEACH SOFTWARE

Employee

ID Name Employee company ID
1 Basil 1
2 Robert 1
3 Donald 1
4 Daniel 2
5 Tom 2

Following DQL query will work and return two companies with property 'employees' hidrated :

SELECT c, e FROM Company c LEFT JOIN c.employees e

Now let's add a WHERE clause :

SELECT c, e FROM Company c LEFT JOIN c.employees e WHERE e.name = 'Robert'

We will get Company #1, but only 1 employee on it (Robert) instead of three.

Explanation

This is how Paginator works :
1) Query is a Count with distinct
2) Query with LIMIT to find all entities ID related
3) retrieve entities with WHERE IN()

Problem is in query 3 : WHERE clause is copied and IN() is added. To work properly, we should reset the WHERE clause and only use IN().

This bug went unseen because Doctrine is using massive cache on Entities based on @id. Tests did not show this bug because the full object is retrieved from the cache version, where all descendants are present.

Solution

in ORM\Tools\Pagination\WhereInWalker.php, reset $AST->whereClause.
I realize just now that this would break applications using WhereInWalker class directly. I wondered if the proper fix would be to duplicate this class as PaginationWhereInWalker and use this last class in Paginator.
Another problem happens with prepared statements (that we should all use with Doctrine) : as we remove some WHERE clauses, we have more parameters than what's bind. Latest pull request contains a fix to not copy parameters in WhereInQuery, and only add what's needed.

This is when I work on such a bug that I understand how complex Doctrine is ... I hope I did not open the pandora's box. If my fix is not implemented properly, I'll will be happy to discuss it.

Full pull Request, containg test and fixes : http://www.doctrine-project.org/jira/browse/DDC-3819






[DDC-3817] hydrating many-to-many relation crashes, when trying to access auto created adder with collection (instead of single entity) Created: 10/Jul/15  Updated: 10/Jul/15  Resolved: 10/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM, Tools
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Stefan T. Assignee: Steve Müller
Resolution: Duplicate Votes: 0
Labels: AllowRemoveByValue, ArrayCollection, DoctrineModule, EntityGenerator, Hydrator, ORM, Stdlib, Strategy, Tools, add, generateEntityStubMethods, hydrate, remove, to-many
Environment:

doctrine-module 0.8.1
zend-framework 2.5.1
PHP 5.5.12
Apache 2.4.9 (Win64)
WampServer 2.5



 Description   

my concern

IF Doctrine\ORM\Tools\EntityGenerator::generateEntityStubMethods (auto) generates adder, which will expect the parameter to be target entity

WHY would DoctrineModule\Stdlib\Hydrator\Strategy\AllowRemoveByValue::hydrate call this very same adder, passing an ArrayCollection

auto generated code:

abstract entity
public function addAnotherEntity(\NameSpace\Entity\AnotherEntity $xy)
{
    $this->anotherEntity[] = $xy;
}

outline of a (quick) workaround:

abstract entity
public function addAnotherEntity($xy)
{
    if($xy instanceof \NameSpace\Entity\AnotherEntity)
        $this->anotherEntity[] = $xy;
    if($xy instanceof \Doctrine\Common\Collections\ArrayCollection)
        foreach($xy as $entity)
            $this->anotherEntity[] = $entity;
}

(Same goes for removing elements from any "to-many"-collection.)

my question\s

Did I miss something on my way?
Is there any way to "enable" some kind of "multi-adding"?
Is there any chance to (further) influence that adding-part with my xml declaration?

Any advice is very welcome.

Maybe I could write my own EntityGenerator. Maybe I should use a custom Hydrator. But right now it seems to me like a little inconsistency in the library.



 Comments   
Comment by Stefan T. [ 10/Jul/15 ]

created twice (maybe a subconscious double click)





[DDC-3816] hydrating many-to-many relation crashes, when trying to access auto created adder with collection (instead of single entity) Created: 10/Jul/15  Updated: 10/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM, Tools
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Stefan T. Assignee: Steve Müller
Resolution: Unresolved Votes: 0
Labels: AllowRemoveByValue, ArrayCollection, DoctrineModule, EntityGenerator, Hydrator, ORM, Stdlib, Strategy, Tools, add, generateEntityStubMethods, hydrate, remove, to-many
Environment:

doctrine-module 0.8.1
zend-framework 2.5.1
PHP 5.5.12
Apache 2.4.9 (Win64)
WampServer 2.5



 Description   

my concern

IF Doctrine\ORM\Tools\EntityGenerator::generateEntityStubMethods (auto) generates adder, which will expect the parameter to be target entity

WHY would DoctrineModule\Stdlib\Hydrator\Strategy\AllowRemoveByValue::hydrate call this very same adder, passing an ArrayCollection

auto generated code:

abstract entity
public function addAnotherEntity(\NameSpace\Entity\AnotherEntity $xy)
{
    $this->anotherEntity[] = $xy;
}

outline of a (quick) workaround:

abstract entity
public function addAnotherEntity($xy)
{
    if($xy instanceof \NameSpace\Entity\AnotherEntity)
        $this->anotherEntity[] = $xy;
    if($xy instanceof \Doctrine\Common\Collections\ArrayCollection)
        foreach($xy as $entity)
            $this->anotherEntity[] = $entity;
}

(Same goes for removing elements from any "to-many"-collection.)

my question\s

Did I miss something on my way?
Is there any way to "enable" some kind of "multi-adding"?
Is there any chance to (further) influence that adding-part with my xml declaration?

Any advice is very welcome.

Maybe I could write my own EntityGenerator. Maybe I should use a custom Hydrator. But right now it seems to me like a little inconsistency in the library.






[DDC-3815] setParameter switching values Created: 09/Jul/15  Updated: 09/Jul/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: erik willems Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: dql, orm
Environment:

zend framework 2



 Description   

It seems that doctrine sets parameters in a wrong order. I have the following parameter array:

$params = array(
1 => array(1, 2, 3, 4, 5, 6),
2 => array(150, 12, 130),
3 => 'CALLED',
4 => array('ND', 'PF', 'OS'),
5 => '2015-07-02 00:00:00',
6 => '2015-07-05 00:00:00'
);

And i have the following query

$query = $this->getEntityManager()->createQuery('
SELECT c FROM Customers\Entity\Customer c
WHERE c.customer_categories_id IN(?1)
AND c.countries_id IN(?2)
AND c.state = ?3
AND c.potential_diamonds IN(?4)
AND c.last_call NOT BETWEEN ?5 AND ?6
');

And this is the final query:

SELECT c0_.id AS id_0, c0_.company AS company_1, c0_.vat_number AS vat_number_2, c0_.first_name AS first_name_3, c0_.last_name AS last_name_4, c0_.phone AS phone_5, c0_.phone2 AS phone2_6, c0_.mobile AS mobile_7, c0_.email AS email_8, c0_.email2 AS email2_9, c0_.fax AS fax_10, c0_.address AS address_11, c0_.address2 AS address2_12, c0_.postal_code AS postal_code_13, c0_.town AS town_14, c0_.province AS province_15, c0_.countries_id AS countries_id_16, c0_.customer_titles_id AS customer_titles_id_17, c0_.customer_categories_id AS customer_categories_id_18, c0_.present_list AS present_list_19, c0_.vip_list AS vip_list_20, c0_.previous_sold AS previous_sold_21, c0_.previous_bought AS previous_bought_22, c0_.opening_hours AS opening_hours_23, c0_.main_office AS main_office_24, c0_.newsletter AS newsletter_25, c0_.website AS website_26, c0_.`state` AS state_27, c0_.potential_diamonds AS potential_diamonds_28, c0_.remarks AS remarks_29, c0_.date_created AS date_created_30, c0_.date_changed AS date_changed_31, c0_.last_call AS last_call_32, c0_.customer_languages_id AS customer_languages_id_33, c0_.display_state AS display_state_34, c0_.longitude AS longitude_35, c0_.latitude AS latitude_36 FROM customers c0_ WHERE c0_.customer_categories_id IN ('ND', '2015-07-05 00:00:00', 'CALLED', 130, 130, 'CALLED') AND c0_.countries_id IN ('ND', '2015-07-05 00:00:00', '2015-07-02 00:00:00') AND c0_.`state` = 'PF' AND c0_.potential_diamonds IN ('2015-07-02 00:00:00', 'OS', 'PF') AND c0_.last_call NOT BETWEEN 'OS' AND 12

if we look in the WHERE part of the query than we see that the parameters are completely flipped. This is very strange. does anyone have an explanation for this or have the same problem? There is not much to find on google.

Thanks in advance






[DDC-3814] counting inverse column of in dql Created: 08/Jul/15  Updated: 08/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: DQL, ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Maximilian Bosch Assignee: Guilherme Blanco
Resolution: Unresolved Votes: 0
Labels: collection, dql, mysql, orm

Attachments: PNG File doctrine-query.PNG     PNG File dql-fail.PNG    

 Description   

I have a self-referenced bidirectional relation in order to show users and their followers. Now I'd like to show the users with the most followers.
But when executing the unit test, doctrine2 tells me that the inverse column user.followers is not valid.

On the first attachement you can see the code. This fetches the user entity and the amount of followers hidden (the followers column is not the owning side, but the inversed column).
On the second picture you can see the complete error message and the call stack






[DDC-3813] [GH-1453] Filter factory added Created: 08/Jul/15  Updated: 08/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of TomasVotruba:

Url: https://github.com/doctrine/doctrine2/pull/1453

Message:

This proposal is to allow DI/IOC support for filters.
Based on #1129, resp. https://github.com/doctrine/doctrine2/pull/1129#issuecomment-54178893

I don't have Doctrine coding standard under my skin yet, so feel free to comment as well.
I look forward for any feedback.






[DDC-3812] [GH-1452] composer: dev is now by default Created: 08/Jul/15  Updated: 08/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of TomasVotruba:

Url: https://github.com/doctrine/doctrine2/pull/1452

Message:






[DDC-3811] [GH-1451] composer: autoload via PSR-4 Created: 08/Jul/15  Updated: 15/Jul/15  Resolved: 15/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: autoloader, composer


 Description   

This issue is created automatically through a Github pull request on behalf of TomasVotruba:

Url: https://github.com/doctrine/doctrine2/pull/1451

Message:






[DDC-3810] [GH-1450] [DX] Link annotation ref to locking explanation Created: 07/Jul/15  Updated: 07/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of davidfuhr:

Url: https://github.com/doctrine/doctrine2/pull/1450

Message:

The annotation reference contained no cross reference to the great
transaction and concurrency page. But this might be very useful for the
reader.






[DDC-3809] Notice: Undefined index in /lib/Doctrine/ORM/Query/SqlWalker.php at line 1920 Created: 07/Jul/15  Updated: 07/Jul/15  Resolved: 07/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Dalibor Karlović Assignee: Benjamin Eberlei
Resolution: Invalid Votes: 0
Labels: None


 Description   

I have two entities, AchievementGoal & AchievementLevel, like so:

/**
 * AchievementLevel
 * @ORM\Table("achievements_levels")
 * @ORM\Entity
 * @ORM\Entity(repositoryClass="AppBundle\Entity\AchievementLevelRepository")
 */
class AchievementLevel
{
    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\AchievementGoal", mappedBy="achievementLevel")
     **/
    private $goals;

    public function __construct()
    {
        $this->goals = new ArrayCollection();
    }
}

/**
 * AchievementGoal
 * @ORM\Table("achievements_goals")
 * @ORM\Entity
 */
class AchievementGoal
{
    /**
     * @var AchievementLevel
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\AchievementLevel", inversedBy="goals")
     * @ORM\Column(name="achievement_level_id")
     */
    private $achievementLevel;

    /**
     * @var Variable
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Variable")
     */
    private $variable;
}

When I try to do query like:

        $qb = $this->getEntityManager()->createQueryBuilder();
        $qb->select('l')
            ->from('AppBundle:AchievementLevel', 'l')
            ->where('EXISTS (
                SELECT g FROM AppBundle:AchievementGoal g WHERE g MEMBER OF l.goals
            )');

I get the error:
Notice: Undefined index: achievementLevel in vendor/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php at line 1920. There seems to be a problem when using both @Id and @Column on the property, if I remove either one, it works (throws some other error, but unrelated to this).



 Comments   
Comment by Dalibor Karlović [ 07/Jul/15 ]

Well, this is awkward. It seems I used @Column instead of @JoinColumn. Only figured it out once I saw Symfony toolbar said I have an invalid mapping. Is there a way for a error to be thrown here?

Hope this helps someone, closing.

Comment by Dalibor Karlović [ 07/Jul/15 ]

Invalid issue, using @Column instead of @JoinColumn. Should trigger an error if possible here, though.





[DDC-3808] [GH-1448] Fix some docblock return types and namespaces Created: 03/Jul/15  Updated: 03/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of dave1010:

Url: https://github.com/doctrine/doctrine2/pull/1448

Message:






[DDC-3807] [GH-1447] Fix second level caching for queries with multiple joins Created: 03/Jul/15  Updated: 03/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of krispypen:

Url: https://github.com/doctrine/doctrine2/pull/1447

Message:

The $metadata of the main entity is not always the metadata you need here, for example when you do join A with B and then B with C. For the second join it was using the metadata from A.






[DDC-3806] Add example on how to connect listener to entity implementing NotifyPropertyChanged Created: 02/Jul/15  Updated: 02/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: None
Fix Version/s: None

Type: Documentation Priority: Minor
Reporter: Wouter Wiltenburg Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: event, listener


 Description   

I am implementing the notify `ChangeTracking` policy according to:

http://doctrine-orm.readthedocs.org/en/latest/cookbook/implementing-the-notify-changetracking-policy.html

And chapter 17.3. Notify:

http://doctrine-orm.readthedocs.org/en/latest/reference/change-tracking-policies.html#notify

But an example on where to best connect the listener to the entity implementing the NotifyPropertyChanged interface is missing. It would be great to add some best practices on how and where to add the listeners.






[DDC-3805] [GH-1445] Allow access to Query#getResultSetMapping Created: 01/Jul/15  Updated: 01/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of Padam87:

Url: https://github.com/doctrine/doctrine2/pull/1445

Message:

Hi,

I've recently came across an issue which would require modifying the result set mapping of a query made with query builder.

I would like to SUM a field with a *custom type*, which is stored as an int, but is normally converted to a custom value object.

When using an aggregation function, the returned result is a simple int.

Is there any reason the `Query#getResultSetMapping` has to be protected?

Is there any danger if I do this?
```php
$rsm = $query->getResultSetMapping();
$rsm->addScalarResult('sclr_2', 'dailySpendLimit', 'bigMoney2Precision');

$query->setResultSetMapping($rsm);
```

Related: https://github.com/doctrine/doctrine2/commit/ea14bcff4a2a78bf774e8847b6645dca112f9757

Thanks!






[DDC-3804] [GH-1444] Missing opening tags added in one of the tutorials Created: 01/Jul/15  Updated: 01/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of cezarykluczynski:

Url: https://github.com/doctrine/doctrine2/pull/1444

Message:

This commit adds opening tags to one of the tutorials, so code can be properly highlighted on http://doctrine-orm.readthedocs.org/en/latest/tutorials/override-field-association-mappings-in-subclasses.html






[DDC-3803] [GH-1425] Also export default value for fieldMapping Created: 30/Jun/15  Updated: 30/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Dick Marinus Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Also export default value for fieldMapping.

Url: https://github.com/doctrine/doctrine2/pull/1425

I've added some test cases but on some platforms phpunit failed because composer is out of date.






[DDC-3802] [GH-1443] Unsigned Created: 30/Jun/15  Updated: 30/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of meeuw:

Url: https://github.com/doctrine/doctrine2/pull/1443

Message:

unsigned isn't in $fieldMapping but in $fieldMapping['options']['unsigned']






[DDC-3801] [GH-1442] Corrected bad class reference in "Adding own commands" Created: 30/Jun/15  Updated: 30/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of elazar:

Url: https://github.com/doctrine/doctrine2/pull/1442

Message:






[DDC-3800] [GH-1441] [QUERY] "INSTANCE OF" now behaves correctly with subclasses Created: 29/Jun/15  Updated: 29/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 1
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of taueres:

Url: https://github.com/doctrine/doctrine2/pull/1441

Message:

There was a bug in the "INSTANCE OF" operator as described in
https://groups.google.com/forum/#!topic/doctrine-user/B8raq8CNMgg

"INSTANCE OF" was not taking into account subclasses.
It was merely translating the class to its discriminator.
This is not correct since the class can have subtypes and those
are, indeed, still instance of the superclass.
Also, classes may not have a discriminator (e.g. abstract classes).

This commit also provide useful tests to avoid regression.






[DDC-3799] Unexpected outcome when using prePersist event and ID GeneratedValue strategy is set to NONE Created: 29/Jun/15  Updated: 29/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Documentation, ORM
Affects Version/s: 2.3.3
Fix Version/s: None

Type: Documentation Priority: Minor
Reporter: yanick Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Setup: I have an entity that uses natural ids (GeneratedValue strategy is set to none). The entity also has life cycle callbacks for prePersist and preUpdate.

Expectation: The UnitOfWork would throw an EntityNotFoundException if I attempt to merge an untracked entity that does not exist in the database. I can catch the exception and call persist. All life cycle callbacks would be executed.

Outcome: No exception is thrown. The UOW creates a new instance of the the incoming object using only the ID. Persist is called on the newly created object and prePersist executes against the empty object. Finally the incoming entity is merged, which overwrites any properties that are managed by prePersist.

I was able to work around this by setting the GeneratedValue strategy to "Custom" and CustomIDGenerator to the AssignedGenerator.






[DDC-3798] Allow Collections to be used transparently with Array-Types Created: 29/Jun/15  Updated: 29/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Minor
Reporter: Robert Schönthal Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: orm


 Description   

Currently its not possible to use Collection with Array-Types transparently:

Entity.php
Unable to find source-code formatter for language: php. Available languages are: actionscript, html, java, javascript, none, sql, xhtml, xml
class Entity
{
    /**
     * @var string[]|Collection
     *
     * @ORM\Column(type="json_array")
     */
    private $aliases = [];

    public function __construct()
    {
        $this->aliases  = new ArrayCollection();
    }
}

if i add Values to the Collection and persist the Entity the aliases are empty.
I need Lifecycle Listener which converts between ArrayCollection and array like this:

Entity.php
Unable to find source-code formatter for language: php. Available languages are: actionscript, html, java, javascript, none, sql, xhtml, xml
    /**
     * @ORM\PrePersist
     */
    public function prePersist()
    {
        $this->aliases = $this->aliases->toArray();
    }

it would be good to have an automatic conversion! Should be fairly easy, i could write a PR if your interessted in...or am i missing a hidden piece?






[DDC-3797] IDENTITY function does not hydrate custom types Created: 26/Jun/15  Updated: 26/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Marcos Passos Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

The function IDENTITY does not hydrate customs types. I've a OrganizationId type, but when a execute the following DQL I got an error, because Doctrine tries to pass an integer as argument of my object constructor instead of an OrganizationId instance.

<mapped-superclass name="Campaign">
        <id name="id" column="id" type="campaign_id" />
        <id name="organization" column="organization_id" association-key="true" />
        <many-to-one field="organization" target-entity="Organization">
            <join-column name="organization_id" referenced-column-name="id" on-delete="CASCADE" on-update="CASCADE" />
        </many-to-one>
    </mapped-superclass>
SELECT NEW CampaignDTO(c.id, IDENTITY(c.organization), c.name) FROM Campaign c

Result:

Catchable Fatal Error: Argument 2 passed to Campaign::__construct() must be an instance of OrganizationId, integer given





[DDC-3796] SELECT NEW does not work with composite keys Created: 26/Jun/15  Updated: 26/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Marcos Passos Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

I'm getting an error trying to instantiate a DTO using a column that is used as ID and foreign key.

<mapped-superclass name="Campaign">
        <id name="id" column="id" type="campaign_id" />
        <id name="organization" column="organization_id" association-key="true" />
        <field name="name" column="name" type="string" length="255" />
        <many-to-one field="organization" target-entity="Organization">
            <join-column name="organization_id" referenced-column-name="id" on-delete="CASCADE" on-update="CASCADE" />
        </many-to-one>
    </mapped-superclass>
SELECT NEW CampaignDTO(c.id, c.organization, c.name) FROM Campaign c

Result:

[Semantical Error] line 0, col 54 near 'organization,': Error: Invalid PathExpression. Must be a StateFieldPathExpression.





[DDC-3795] [GH-1439] One to one unique index mapping bug Created: 26/Jun/15  Updated: 26/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of baerrach:

Url: https://github.com/doctrine/doctrine2/pull/1439

Message:

As per request on google groups.

My original problem was that schema:validate is telling me the database is not up to date and the only SQL it wants to run is DROP INDEX and CREATE INDEX on what is already there.

To write some tests to see why, I started hacking OrmFunctionalTestCase to give me back the class metadata for the model set in use. And while I was doing that I DRYed up the test setup to avoid duplication. But the ValueConversionType stopped working because they DROP TABLES when no other tests do. I think the drop tables was necessary because they use the same entities across some of the different test classes so when the entites were setup the would fail because the table already existed - which is the problem I bumped into.

I've got the code working by sharing the schema creation setup and not dropping tables, but because of this OneToOne mapping issue the tests fail because the unique index name already exists in the name space.

I've pushed the code changes to https://github.com/baerrach/doctrine2/tree/one-to-one-unique-index-mapping-bug so you can see what I am talking about.

Its done in three stages:

b0ce47d Remove tearDownAfterClass() and DROP TABLES

4b5cd37 DRY test setup for entities and modelSets

f7efac6 Fix OneToOne unique constraint mapping

You can run the ValueConversionType to see the failures, and resolution, in action.

phpunit -d memory_limit=-1 tests/Doctrine/Tests/ORM/Functional/ValueConversionType/






[DDC-3794] Cannot set default value on a @joinColumn Created: 25/Jun/15  Updated: 25/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers, Tools
Affects Version/s: 2.4.4
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Ben Meynell Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: joins, schema, schemadiff, validator
Environment:

Symfony 2.3; Ubuntu 14.04



 Description   

The @Column allows for options={"default":1}).

However, @joinColumn does not support options={"default":1}).

The implication of this is that a default value can never be set for new database schemas and for existing schemas that have DEFAULT '1' included in its column definition a schema mismatch will occur when running doctrine:schema:validate.

Since there is no way to define a default on the entity-level there is no way to reconcile the mismatch. Instead, the default value just be removed from the database schema and be enforced on the application level.






[DDC-3793] Unit Of Work - Proxy injected collections 'PersistentCollections' Created: 24/Jun/15  Updated: 24/Jun/15  Resolved: 24/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Leonel Franchelli Assignee: Marco Pivetta
Resolution: Duplicate Votes: 0
Labels: PersistentCollection, UnitOfWork
Environment:

Symfony 2.7 , Doctrine 2.5.0


Attachments: PNG File Selection_008.png     PNG File Selection_009.png     PNG File Selection_010.png    
Issue Links:
Duplicate
duplicates DDC-391 Allow to specifiy custom Entity and C... In Progress
duplicates DDC-80 Allow custom collections Resolved

 Description   

Hi all , i was looking to extend ArrayCollection i did it, but i notice something very very unusual, when an entity is loaded from the DB the unit of work most precisely on the method 'createEntity' it injects PersistentCollection object in the collections of all the entities, why you do that ?

Is there any way to inject my own subclass of PersistentCollection to the proxy objects ? Of course i know that i have to also extend PersistentCollection and create a CustomPersistentCollection

Sry for my english



 Comments   
Comment by Marco Pivetta [ 24/Jun/15 ]

Custom persistent collections are not yet supported.

See DDC-80 and DDC-391

Comment by Leonel Franchelli [ 24/Jun/15 ]

Thx for answering so quickly , well i just hope in some future version you add this feature eventually





[DDC-3792] Broken link to api docs in documentation Created: 24/Jun/15  Updated: 24/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: 2.5
Fix Version/s: None

Type: Documentation Priority: Trivial
Reporter: Felipe Figueroa Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: documentation
Environment:

Online documentation



 Description   

Links to API docs from doctrine documentation are broken in its latest version.

For example, in second level cache section, under cache region the link to API Doc points to http://www.doctrine-project.org/api/orm/2.5/class-Doctrine.ORM.Cache.Region.html/ which doesn't exist.

Actually, it doesn't seem to be an API doc section for version 2.5 whatsoever.






[DDC-3791] Creating a sequence results in an error using Postgres: sequences' name must be quoted Created: 23/Jun/15  Updated: 23/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Critical
Reporter: Marcos Passos Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Postgres' sequences must be quoted. The following snippet results in a error:

$schemaManager->createSequence(new Sequence('123_foo'));

Error:

SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "123"
LINE 1: CREATE SEQUENCE 123_foo INCREMENT BY 1 MINVALUE 1





[DDC-3790] [GH-1438] added failing test illustrating Paginator's issue with value object ids Created: 23/Jun/15  Updated: 23/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of dadamssg:

Url: https://github.com/doctrine/doctrine2/pull/1438

Message:

The Paginator does not handle entities with value objects for id's. I've create a failing test illustrating this.

[The accompanying issue](http://www.doctrine-project.org/jira/browse/DDC-3789)






[DDC-3789] Paginator does not convert entity ids if they are value objects Created: 23/Jun/15  Updated: 23/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Critical
Reporter: David Adams Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

If an entity uses a custom value object and DBAL type for its id, the value object is used as query parameters instead of the converted value.

Here is where $ids contains an array of value objects. This eventually gets set as parameter for the query here.

This leads to an exception like this:

An exception occurred while executing 'SELECT a0_.id AS ID_0, a0_.created_at AS CREATED_AT_1, a0_.updated_at AS UPDATED_AT_2, a0_.name AS NAME_3, a0_.primary_image_id AS PRIMARY_IMAGE_ID_4, a0_.category_id AS CATEGORY_ID_5, a0_.created_by_id AS CREATED_BY_ID_6 FROM assets a0_ WHERE a0_.created_by_id = ? AND a0_.category_id = ? AND a0_.id IN (?, ?, ?)' with params [\"9369f64a-a978-4c5c-b403-baef2576285f\", \"2f8d4a66-47af-4b14-9a3d-54c1debd084c\", {}, {}, {}]:\n\nWarning: oci_bind_by_name(): Invalid variable used for bind

The 3 empty parameters are how my value objects are being wrongly represented.

I've fixed a similar issue in this pull request but I don't know how to go about fixing this in the Paginator.

One solution could be to only allow value objects for id's if the value object class has a __toString() method and another line gets added after the id objects are retrieved:

Paginator.php
    /**
     * {@inheritdoc}
     */
    public function getIterator()
    {
        // existing code

        $ids = array_map('current', $subQuery->getScalarResult());
        $ids = array_map('strval', $ids);

        // existing code
    }





[DDC-3788] [GH-1437] [2.3] Updated docs for basic mapping Created: 23/Jun/15  Updated: 23/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.3, 2.4, 2.5
Fix Version/s: None
Security Level: All

Type: Documentation Priority: Trivial
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: documentation, generator-strategy, identifier, orm

Issue Links:
Reference
relates to DDC-451 Add GUID/UUID Id Generator Resolved

 Description   

This issue is created automatically through a Github pull request on behalf of phansys:

Url: https://github.com/doctrine/doctrine2/pull/1437

Message:

Added note about UUID identifier generator strategy, which was added in 2.3 version at @0a835609fabd9ef600127c4cacfbcc776d31d981.



 Comments   
Comment by Phansys [ 23/Jun/15 ]

Added GUID/UUID Id Generator.





[DDC-3787] [GH-1436] allow ManyToManyPersister to handle identification types Created: 23/Jun/15  Updated: 23/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of dadamssg:

Url: https://github.com/doctrine/doctrine2/pull/1436

Message:

This is my updated pull request which includes a test....but the test passes even without the fix. I'm not sure how to write a test which illustrates PDO throwing an exception without a database.

[Issue for pull request](http://www.doctrine-project.org/jira/browse/DDC-3785)






[DDC-3786] [GH-1435] allow ManyToManyPersister to handle identification types Created: 23/Jun/15  Updated: 23/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of dadamssg:

Url: https://github.com/doctrine/doctrine2/pull/1435

Message:



 Comments   
Comment by Doctrine Bot [ 23/Jun/15 ]

A related Github Pull-Request [GH-1435] was closed:
https://github.com/doctrine/doctrine2/pull/1435





[DDC-3785] DBAL types are ignored in the ManyToManyPersister Created: 23/Jun/15  Updated: 23/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Critical
Reporter: David Adams Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

If you're using custom DBAL types for id's, they are ignored and the value object is passed directly to be bound to the query.

For example, I have an Asset that has many Attributes. My asset's id is an AssetId object. I've created a custom DBAL type for AssetId. Whenever doctrine attempts to cleanse the Asset from orphaned Attributes an exception is thrown:

An exception occurred while executing 'DELETE FROM asset_attributes WHERE asset_id = ?' with params [{}]: Warning: oci_bind_by_name(): Invalid variable used for bind

The ManyToManyPersister::delete() method does not pass along any $types to the Connection::executeUpdate() method. The executeUpdate() method checks if there are types and if there are none, does not pass the params to the _bindTypedValues() method, which I think is the problem. The params(AssetId) get passed directly to the $stmt->execute($params) method call.

I believe the ManyToManyPersister::delete() method needs to look like this. This seems to work.

ManyToManyPersister.php
    /**
     * {@inheritdoc}
     */
    public function delete(PersistentCollection $collection)
    {
        $mapping = $collection->getMapping();

        if ( ! $mapping['isOwningSide']) {
            return; // ignore inverse side
        }
        $types = [];
        $class = $this->em->getClassMetadata($mapping['sourceEntity']);

        foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) {
            $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $class, $this->em);
        }

        $this->conn->executeUpdate($this->getDeleteSQL($collection), $this->getDeleteSQLParameters($collection), $types);
    }





[DDC-3784] [GH-1434] convertToDatabaseValueSQL with $columnName Created: 21/Jun/15  Updated: 24/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of mihai-stancu:

Url: https://github.com/doctrine/doctrine2/pull/1434

Message:

Goal:

I want to be able to atomically increment a property such that $stock->setQuantityDelta(2); will render into an SQL such as UPDATE stock SET quantity = quantity+? WHERE id = ?;.

I would like to accomplish this without using DQL every time it is necessary hence I implemented a custom Doctrine2 type which can accomplish this – with support from this PR.

Changes:

\Doctrine\ORM\Persisters\BasicEntityPersister::updateTable now passes the column name to Doctrine\DBAL\Types\Type::convertToDatabaseValueSQL (PR) to be used by the concrete type instance (ex.: mihai-stancu/doctrine-types-extra:\MS\Doctrine\DBAL\Types\DeltaType).



 Comments   
Comment by Doctrine Bot [ 24/Jun/15 ]

A related Github Pull-Request [GH-1434] was closed:
https://github.com/doctrine/doctrine2/pull/1434





[DDC-3783] [GH-1433] Check for non-cacheable entities on metadata level, not at runtime Created: 20/Jun/15  Updated: 16/Jul/15  Resolved: 16/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers, Second Level Cache
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: metadata, performance, second-level-cache


 Description   

This issue is created automatically through a Github pull request on behalf of goetas:

Url: https://github.com/doctrine/doctrine2/pull/1433

Message:

This PR moves the check for non-cacheable entities from "runtime" to metadata definition.

If an entity has an association key as part of its PK, and this association key is not configured to be stored into SLC, an exception it thrown.

The previous approach was checking this constraint at "runtime" (right before saving the value), this PR moves this check at metadata level into (`_validateAndCompleteAssociationMapping` method).



 Comments   
Comment by Doctrine Bot [ 15/Jul/15 ]

A related Github Pull-Request [GH-1433] was labeled:
https://github.com/doctrine/doctrine2/pull/1433

Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1433] was assigned:
https://github.com/doctrine/doctrine2/pull/1433

Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1433] was merged:
https://github.com/doctrine/doctrine2/pull/1433





[DDC-3782] onDelete="..." Change Not Recognized Created: 19/Jun/15  Updated: 19/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: 2.4.4
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Ben Meynell Assignee: Steve Müller
Resolution: Unresolved Votes: 0
Labels: ondelete
Environment:

Ubuntu 14.04; Symfony 2.3



 Description   

Steps to Reproduce

  • DB column is DEFAULT NULL and has a constraint of ON DELETE CASCADE.
  • DB and Entity schema are in sync.
  • Entity field definition is changed from onDelete="CASCADE" to onDelete="SET NULL".
  • doctrine:migrations:diff and doctrine:schema:validate do not recognize the change.





[DDC-3781] Fix Optimistic Locking Scenarios for Versioned Entities in Bidirectional Relationships Created: 18/Jun/15  Updated: 14/Jul/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Bill Schaller Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: locking, persistence, versioned

Issue Links:
Reference
is referenced by DDC-3681 [GH-1378] Feature to force-increment ... Closed
is referenced by DDC-3823 [GH-1456] No-frills support for Entit... Awaiting Feedback

 Description   

As described in PR #1378, some scenarios involving a parent-child bidirectional relationship may incorrectly result in the parent's version not being incremented while the child's is.

An example: Versioned entity PurchaseOrder has a collection-valued association to versioned entity PurchaseOrderItem. Considering this as a business use-case, if the state of a PurchaseOrderItem changes during another transaction accessing the parent PurchaseOrder, the state of the PurchaseOrder can be considered to have changed as well. However, in the current ORM implementation, the PurchaseOrder is not considered to have changed, allowing transactions modifying it to proceed concurrently with transactions modifying its children, possibly resulting in inconsistent state.

The solution proposed in the referenced PR is unsuitable. Versioning should be transparent to userland code, and should be managed solely by the persistence layer - the EntityManager.

I think in this instance, we can look to the JPA spec as a good reference on how to handle this:

The version attribute is updated by the persistence provider runtime when the object is written to the database. All non-relationship fields and properties and all relationships owned by the entity are included in version checks (35).

(35) This includes owned relationship maintained in join tables.

JPA 2.1 spec

From what I understand of the implementation in Hibernate, version updates on the owning side of relationships propagate to the inverse side of bidirectional relationships if both sides are versioned entities.

So in the case of the example, if only a PurchaseOrderItem is changed and persisted, both the parent PurchaseOrder's version and the PurchaseOrderItem's version would be updated.

I am not certain what level of effort this would require, but I think changes would be required in UnitOfWork, BasicEntityPersister, and JoinedSubclassPersister.

As for performance effects, I think the performance impact will be minimal in most cases, as most scenarios will only add a single additional update statement. In cases where version updates propagate to multiple entities on inverse sides of relationship, each additional relation that meets the criteria will add an additional update statement.

If the persister is required to fetch the related entity before incrementing the version, it will add additional overhead to queries affecting related versioned entities. Therefore the documentation would need to discuss the potential performance impact, and recommend application of versioning and entity relationships with care.

A possible enhancement would be the addition of an @OptimisticLock(propagate=false) annotation for inverse-side properties, which would prevent propagation of version updates from related entities.



 Comments   
Comment by Doctrine Bot [ 18/Jun/15 ]

A related Github Pull-Request [GH-1378] was closed:
https://github.com/doctrine/doctrine2/pull/1378

Comment by Darien Hager [ 19/Jun/15 ]

First, I'd like to toss another scenario on the pile: Consider an entity like, uhm, FavoritePurchaseOrders.

It refers to an owning User, references a set of PurchaseOrder items, and contains some statistics like "total price" or "earliest due-date".

This is different from the PurchaseOrder->PurchaseOrderItem relationship, because it probably uses a link-table and probably does not own/cascade-persist to PurchaseOrder items, since you generally favorite things which already exist. While it refers to a User, its version doesn't need to get updated if the owner is modified or reassigned, since it contains no user-specific information.

Secondly, should there be preFlush/postFlush events for entities whose versions are being altered, even if no other immediate values are changing? This probably relates to whether entities must be loaded in order to bump their versions.

Comment by Darien Hager [ 14/Jul/15 ]

I've submitted DDC-3823 as a possible precursor for this ticket. It exposes a mechanism for UOW to record that an entity is scheduled to have its version increased for some reason other than direct alterations.





[DDC-3780] YmlDriver causing deprecated calls in Symfony 2.7 Created: 18/Jun/15  Updated: 18/Jun/15  Resolved: 18/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers
Affects Version/s: 2.4.7
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Minor
Reporter: Ziad Jammal Assignee: Marco Pivetta
Resolution: Won't Fix Votes: 0
Labels: None


 Description   

The 'YamlDriver' in 'Doctrine\ORM\Mapping\Driver' still uses Yaml:parse($file), which is causing deprecated logs in Symfony 2.7 branch.



 Comments   
Comment by Marco Pivetta [ 18/Jun/15 ]

This is already fixed in ORM 2.5.x





[DDC-3779] [GH-1432] Change named native query message Created: 18/Jun/15  Updated: 18/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of coladict:

Url: https://github.com/doctrine/doctrine2/pull/1432

Message:

Since the feature is not implemented, it should throw that message, instead of the other one.
Once reading the queries into the `_attributes['namedNativeQueries']` array has been implemented, the message should be removed.



 Comments   
Comment by Doctrine Bot [ 18/Jun/15 ]

A related Github Pull-Request [GH-1432] was labeled:
https://github.com/doctrine/doctrine2/pull/1432





[DDC-3778] [GH-1430] "INSTANCE OF" example doesn't match description. Created: 18/Jun/15  Updated: 18/Jun/15  Resolved: 18/Jun/15

Status: Closed
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: 2.5
Fix Version/s: 2.5.1, 2.6.0
Security Level: All

Type: Bug Priority: Minor
Reporter: Doctrine Bot Assignee: Bill Schaller
Resolution: Fixed Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of michael-lavaveshkul:

Url: https://github.com/doctrine/doctrine2/pull/1430

Message:

Just did a small change. The DQL is supposed to
> [Query] for the staffs without getting any technicians

As it's currently written, it would select all ``Staff`` and the ``INSTANCE OF`` check would only test if they're ``Staff``.



 Comments   
Comment by Doctrine Bot [ 18/Jun/15 ]

A related Github Pull-Request [GH-1430] was assigned:
https://github.com/doctrine/doctrine2/pull/1430

Comment by Doctrine Bot [ 18/Jun/15 ]

A related Github Pull-Request [GH-1430] was merged:
https://github.com/doctrine/doctrine2/pull/1430

Comment by Bill Schaller [ 18/Jun/15 ]

Backported to 2.5





[DDC-3777] BigInt Ids from SequenceGenerator cast to int Created: 16/Jun/15  Updated: 16/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Jeffrey Zullo Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: identifier, orm, sequence-generator


 Description   

Introduced by commit 5aeabcb445acf DDC-1490.

I have an entity with the following annotation:

/**
 * @Id
 * @Column(type="bigint", precision = 15, name="id")
 * @GeneratedValue(strategy="SEQUENCE")
 * @SequenceGenerator(sequenceName="my_sequence_name")
 */

If the "my_sequence_name" sequence is at a value greater than the php int max for 32-bit php (2147483647), the id generated by the SequenceGenerator is capped at 2147483647.

For example, "my_sequence_name" is currently at 4744708191. Attempting to save a new entity using this sequence generates 2147483647 as the id every time, even though the sequence value keeps increasing as expected.

This is caused by cast to int introduced to SequenceGenerator in commit 5aeabcb445acf.



 Comments   
Comment by Jeffrey Zullo [ 16/Jun/15 ]

Note: This is an issue for 32 bit php. I'm sure it would be an issue for 64 bit php as well, but my sequence hasn't overflowed that upper bound yet.





[DDC-3776] [GH-1428] Add test to reproduce [DDC-3775] Created: 16/Jun/15  Updated: 16/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of NinoFloris:

Url: https://github.com/doctrine/doctrine2/pull/1428

Message:

Partial hydration of an object removes ability to correctly retrieve any other object of the same type






[DDC-3775] Partial hydration of an object removes ability to correctly retrieve any other object of the same type Created: 16/Jun/15  Updated: 16/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Nino Floris Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Partial hydration of an object removes ability to correctly retrieve any other object of the same type

PR: https://github.com/doctrine/doctrine2/pull/1428






[DDC-3774] [GH-1427] Method chaining make it easy to use em Created: 15/Jun/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Incomplete Votes: 0
Labels: entitymanager, fluent


 Description   

This issue is created automatically through a Github pull request on behalf of ronfroy:

Url: https://github.com/doctrine/doctrine2/pull/1427

Message:

Method chaining make it easy to use em



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1427] was closed:
https://github.com/doctrine/doctrine2/pull/1427





[DDC-3773] [GH-1426] Method chaining make it easy to use Created: 15/Jun/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Won't Fix Votes: 0
Labels: entitymanager, fluent


 Description   

This issue is created automatically through a Github pull request on behalf of ronfroy:

Url: https://github.com/doctrine/doctrine2/pull/1426

Message:






[DDC-3772] ORM\PreFlush() not Persisted in Database but return right value in my form Created: 15/Jun/15  Updated: 15/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Arthur Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

I have a problem with a Preflush() method.

When I valid my form, my form return to me the values that expected but they are not persisted into the database in the case where I create a new Entity.

to a better understand for you, all files that I'm using are in this Gist :
https://gist.github.com/zagloo/1eaedffc2f479686d98f

I have 2 Entities :

  • «First» with fields named «field1» and «field2»
  • «Other» with fields named «field3» and «field4»

These 2 Entities have these relation between them :

  • «First» have OneToMany with «Other»
  • «Other» have ManyToOne with «First»

Then I my controller TestController, I create a form with «FirstType» and «OtherType» and render it in test_preflush,html,twig

Feature of my form : I'm using a custom textarea named «textarea_test» thanks to a TestType which using a Transformer TestTranformer.

This Transformer allows to transform a PersistCollection in a String and conversely with the reverseTransform.

In the Transformer TestTranformer, public function transform($value) method concatenate each field3 from Other Entity in <div> tag.

Vsual example :

Database for «First» Entity

Database for «Other» Entity

The render in twig of the form with the transformer :

Until here, no problem, I have what I expected, a textarea with a concatenation of field3 !

Then, if I modify a value, no problem, the PreFluch() contained at the end of «First» Entity works.
-> value of field3 for the first entity Other is changed by "toto" in database and returned right in my twig form !

/**
*@ORM\PreFlush()
*/

public function testPreFlush()
{
    $this->Others->first()->setField3('toto');
}

Database for «Other» Entity

The render in twig of the form with the transformer :

Now, here is my PROBLEM !
I delete all in my textarea and add a new <div> with an ID and a new value like <div id="88">NEW VALUE</div>

Normally, my Reversetransformer create a new Other() and set value into it. (see TestTransformer Gist from the line 55).

But when I valid the form, in return, in my twig I get a good text area with <div id="17">toto</div> BUT in the Database the Preflush has not been persisted !

My twig (Good return)

My Database Other Entity

TO RESUME,

if I just modify values in text area, no problem
=> toto is persisted in database and return in my form twig.

But if I add a new field3, toto is returned into my twig (good!) but not persisted into the database (not good....!!)...

Where is the problem please ? (and sorry for my english)

For Information , here are the different versions that I'm using thanks to the command composer show -i in the console of my IDE :

For Symfony :
symfony/symfony v2.7.0 The Symfony PHP framework

For Doctrine :
doctrine/annotations v1.2.4 Docblock Annotations Parser
doctrine/cache v1.4.1 Caching library offering an object-oriented API for many cache backends
doctrine/collections v1.3.0 Collections Abstraction library
doctrine/common v2.5.0 Common Library for Doctrine projects
doctrine/data-fixtures v1.1.1 Data Fixtures for all Doctrine Object Managers
doctrine/dbal v2.4.4 Database Abstraction Layer
doctrine/doctrine-bundle v1.5.0 Symfony DoctrineBundle
doctrine/doctrine-cache-bundle v1.0.1 Symfony2 Bundle for Doctrine Cache
doctrine/doctrine-fixtures-bundle dev-master c5ff054 Symfony DoctrineFixturesBundle
doctrine/inflector v1.0.1 Common String Manipulations with regard to casing and singular/plural rules.
doctrine/lexer v1.0.1 Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
doctrine/orm v2.4.7 Object-Relational-Mapper for PHP






[DDC-3771] [GH-1424] [DDC-3761] Fixed cache key Created: 14/Jun/15  Updated: 14/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of Ragazzo:

Url: https://github.com/doctrine/doctrine2/pull/1424

Message:

Related with this [one](https://github.com/doctrine/doctrine2/pull/1423)






[DDC-3770] [GH-1423] Second Level Cache key Created: 14/Jun/15  Updated: 14/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of Ragazzo:

Url: https://github.com/doctrine/doctrine2/pull/1423

Message:

Various cache engines may not support spaces in key, like memcached, this will result in cache miss since cache component will return false on persisting data to cache






[DDC-3769] Doctine column name truncation can cause syntax errors in Oracle Created: 12/Jun/15  Updated: 12/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Jeffrey Zullo Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Reproduction
Given the following entity:

namespace Test\Entity;
/**
 * @Entity
 * @Table(name="test_doctrine_defect")
 */
  class TestObject
  {
      /**
       * @Id
       * @Column(type=int, length=15, name="my_column_name_is_toooooo_long")
        */
        protected $id;

        public function __construct($val)
        {
            $this->id = $val;
        }
  }

and a table defined as

CREATE TABLE test_doctrine_defect (id NUMBER(15) PRIMARY KEY);

and populated with a single record of id = 1

Run the following:

$entityManager->getRepository('Test\Entity\TestObject')->find(1);

Expected Results
We find the record with ID = 1 and return the corresponding entity

Actual Results
We die with an exception:

[error] AppException 2015-06-12T15:39:08.80813Z 15c28eec.1d7.2e136
	type:Doctrine\DBAL\DBALException
	file:/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php
	line:119
	message:An exception occurred while executing 'SELECT t0.my_column_name_is_toooooo_long AS _COLUMN_NAME_IS_TOOOOOO_LONG_1 FROM test_doctrine_defect t0 WHERE t0.my_column_name_is_toooooo_long = ?' with params ["1"]:

ORA-00911: invalid character

	trace: vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:836 in Doctrine\DBAL\DBALException::driverExceptionDuringQuery(Object[XLS\DBAL\XLSOCI8\Driver], Object[Doctrine\DBAL\Driver\OCI8\OCI8Exception], 'SELECT t0.my_column_name_is_toooooo_long AS _COLUMN_NAME_IS_TOOOOOO_LONG_1 FROM test_doctrine_defect t0 WHERE t0.my_column_name_is_toooooo_long = ?', Array[1])
		vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:712 in Doctrine\DBAL\Connection->executeQuery('SELECT t0.my_column_name_is_toooooo_long AS _COLUMN_NAME_IS_TOOOOOO_LONG_1 FROM test_doctrine_defect t0 WHERE t0.my_column_name_is_toooooo_long = ?', Array[1], Array[1])
		vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:730 in Doctrine\ORM\Persisters\Entity\BasicEntityPersister->load(Array[1], '')
		vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:462 in Doctrine\ORM\Persisters\Entity\BasicEntityPersister->loadById(Array[1])
		vendor/doctrine/orm/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php:180 in Doctrine\ORM\EntityManager->find('Test\Entity\TestObject', '1', '', '')
		vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php:154 in Doctrine\ORM\Decorator\EntityManagerDecorator->find('Test\Entity\TestObject', '1', '', '')
		myfile.php:527 in Doctrine\ORM\EntityRepository->find('1')

This is caused by the first character in the column name becoming _ after truncation.

Oracle has a maximum column length of 30 characters, so Doctrine truncates the column after applying the _N suffix to guarantee unique column aliases. However, this causes a problem with the _N suffix is the same length as the number of characters before the first underscore in said column for Oracle.






[DDC-3768] [GH-1421] bugfix: when the database is purged, is not addign schema Created: 12/Jun/15  Updated: 12/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of rafreis:

Url: https://github.com/doctrine/doctrine2/pull/1421

Message:






[DDC-3767] orm-alternative connection to use different database is working fine but then I have to use orm-default as a driver and not orm-alternative as driver while it should have been the other way. Created: 12/Jun/15  Updated: 12/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers, ORM
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Ovi Mughal Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: mapping
Environment:

Windows 7, Doctrine-ORM-Module 0.9, ZF2 2.5



 Description   

I needed to create module level database connection, I did override to orm-default and created orm-alternative connection but when using driver for it as orm-alternative, object manager instance is not created but when I use orm-default as driver everything works fine. But why?

Here is what is my config:
NOTE: if change orm_oz_default to orm-default on line #25, everything works fine.

return array(
1. 'doctrine' => array(
2. 'connection' => array(
3. 'orm_oz_default' => array(
4. 'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
5. 'params' => array(
6. 'host' => 'localhost',
7. 'port' => '3306',
8. 'user' => 'root',
9. 'password' => '',
10. 'dbname' => 'zfdocttwo',
11. )
12. )
13. ),
14. 'entitymanager' => array(
15. 'orm_oz_default' => array(
16. 'connection' => 'orm_oz_default',
17. )
18. ),
19. 'driver' => array(
20. 'moduletwo_Entity' => array(
21. 'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
22. 'cache' => 'array',
23. 'paths' => array(_DIR_.'/../src/Moduletwo/Entity')
24. ),
25. 'orm_oz_default' => array(
26. 'drivers' => array(
27. 'Moduletwo\Entity' => 'moduletwo_Entity'
28. )
28. )
30. )
31. ),
32.);






[DDC-3766] [GH-1420] bugfix: when the database is purged, is not addign schema Created: 12/Jun/15  Updated: 12/Jun/15  Resolved: 12/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Incomplete Votes: 0
Labels: fixtures, quoting, schema, sql


 Description   

This issue is created automatically through a Github pull request on behalf of rafreis:

Url: https://github.com/doctrine/doctrine2/pull/1420

Message:



 Comments   
Comment by Doctrine Bot [ 12/Jun/15 ]

A related Github Pull-Request [GH-1420] was assigned:
https://github.com/doctrine/doctrine2/pull/1420

Comment by Doctrine Bot [ 12/Jun/15 ]

A related Github Pull-Request [GH-1420] was closed:
https://github.com/doctrine/doctrine2/pull/1420





[DDC-3765] [GH-1419] [DDC-3382] Allow orphan removal to be cancelled Created: 11/Jun/15  Updated: 16/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None

Issue Links:
Duplicate
duplicates DDC-3382 [GH-1419] With orphanRemoval, cannot ... Resolved

 Description   

This issue is created automatically through a Github pull request on behalf of c960657:

Url: https://github.com/doctrine/doctrine2/pull/1419

Message:

I have a one-to-many relation with orphanRemoval=true.
If I remove an entity from the related collection and add it back, the entity is removed from the database.

```PHP
$employee = $company->getEmployees()->first();
$company->getEmployees()->removeElement($employee);
$company->getEmployees()->add($employee);

$em->persist($company);
$em->flush();
// Now $employee is deleted from the database.
```

The expected behaviour is to leave the entity in the database, because it was present in the PersistentCollection when $em->persist() was called.

This has previously been suggested in DDC-3382(http://www.doctrine-project.org/jira/browse/DDC-3382), but it was rejected. This PR shows how small a change it is, so I hope the suggestion will be reconsidered in the light of this.



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1419] was merged:
https://github.com/doctrine/doctrine2/pull/1419





[DDC-3764] MappingException thrown on table not in filter Created: 11/Jun/15  Updated: 12/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Jordan Gigov Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: import, mapping, postgresql


 Description   

I'm using the command line to import the database schema from en existing project in another language, however this happens every time

jordan@jordan:~/workspace/testimport$ app/console -v doctrine:mapping:import OldBundle --filter=Users

  [Doctrine\ORM\Mapping\MappingException]
  It is not possible to map entity 'QrtzTriggers' with a composite primary key as part of the primary key of another entity 'QrtzCronTriggers#schedName'.
  

As maybe you can see I've specified a filter to only give me one table, but it throws an exception on a completely unrelated one. There are absolutely no database relations between the Qrtz tables and everything else. The only workaround is to drop the tables, just so I can do the import, but that means I'll have to restore the database later. Those tables are for a distinct module within our system, which can't be ported, even if we decide to migrate.

Whatever analyser you're calling in there should really respect the filters. Not only is it doing extra work, but it's also causing this crash.



 Comments   
Comment by Marco Pivetta [ 11/Jun/15 ]

Loading invalid mappings, regardless of how they are filtered afterwards, is still invalid.

Comment by Jordan Gigov [ 12/Jun/15 ]

Invalid? Tell that to the people at Postgre and Quartz. I'm sure they'll agree you can't possibly have an entity with a composite primary key be referenced by others.

Anyway I'm not asking for composite key references to be implemented (I could try doing it once I get familiar with the system), I'm asking that the filter be respected.

Comment by Marco Pivetta [ 12/Jun/15 ]

Invalid? Tell that to the people at Postgre and Quartz.

Well, the ORM, like any other tool, has its limits.

The filtering happens post-load, so your suggestion would require a massive rewrite of the entire functionality.

You could also simply dump the relevant schema and drop the tables from the dump, as you suggested above.





[DDC-3763] Passing "false" boolean value to eq() function in query builder does not end up SQL query Created: 09/Jun/15  Updated: 09/Jun/15  Resolved: 09/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Trivial
Reporter: Danijel Assignee: Marco Pivetta
Resolution: Duplicate Votes: 0
Labels: querybuilder

Issue Links:
Duplicate
duplicates DDC-3762 Passing "false" boolean value to eq()... Resolved

 Description   

$qb->andWhere($qb->expr()->eq('d.active', true));

produces:

[_dql:Doctrine\ORM\Query:private] => SELECT COUNT(r.id) FROM Game:Roll r INNER JOIN r.hand d WHERE d.userId = :userId AND d.active = 1

$qb->andWhere($qb->expr()->eq('d.active', false));

produces:

[_dql:Doctrine\ORM\Query:private] => SELECT COUNT(r.id) FROM Game:Roll r INNER JOIN r.hand d WHERE d.userId = :userId AND d.active =

and this query fails with an error:

[Syntax Error] line 0, col -1: Error: Expected Literal, got end of string.

As a workaround I am using 1 and 0 instead of "true" and "false"






[DDC-3762] Passing "false" boolean value to eq() function in query builder does not end up SQL query Created: 09/Jun/15  Updated: 09/Jun/15  Resolved: 09/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Trivial
Reporter: Danijel Assignee: Marco Pivetta
Resolution: Invalid Votes: 0
Labels: querybuilder

Issue Links:
Duplicate
is duplicated by DDC-3763 Passing "false" boolean value to eq()... Resolved

 Description   
$qb->andWhere($qb->expr()->eq('d.active', true));

produces:

   [_dql:Doctrine\ORM\Query:private] => SELECT COUNT(r.id) FROM Game:Roll r INNER JOIN r.hand d WHERE d.userId = :userId AND d.active = 1
$qb->andWhere($qb->expr()->eq('d.active', false));

produces:

   [_dql:Doctrine\ORM\Query:private] => SELECT COUNT(r.id) FROM Game:Roll r INNER JOIN r.hand d WHERE d.userId = :userId AND d.active = 

and this query fails with an error:

[Syntax Error] line 0, col -1: Error: Expected Literal, got end of string.

As a workaround I am using 1 and 0 instead of "true" and "false"



 Comments   
Comment by Marco Pivetta [ 09/Jun/15 ]

You are not using parameter binding. Expressions use string concatenation internally, so this outcome is actually expected. Instead, you should do following:

$qb->andWhere($qb->expr()->eq('a.field', ':key'));
$qb->setParameter('key', false);




[DDC-3761] Entity Cache Key save bug Created: 08/Jun/15  Updated: 14/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Second Level Cache
Affects Version/s: 2.5
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Mark Assignee: Fabio B. Silva
Resolution: Unresolved Votes: 0
Labels: None


 Description   

When using memcached for caching query or entities, queries will be performed each time, since EntityCacheKey use space in its key. I can submit PR if needed. Let me know if it is needed to be fixed in other places, however i looked through the code and have not found any other places



 Comments   
Comment by Mark [ 10/Jun/15 ]

any news on this one? Should i submit PR or is there any internals issues?

Comment by Fabio B. Silva [ 10/Jun/15 ]

That seems to be the issue,
Please fell free to send a PR

Comment by Mark [ 14/Jun/15 ]

fixed it with simple replacing spaces to dots, in this PR https://github.com/doctrine/doctrine2/pull/1423. We already use this in production with Second Level Cache, however we replaced whole key with md5() for simplicity. Also it may not be question for you but why there is no checks for key length for cache? Since default policy for SCL is to rely on namespaces when generate keys it can easily go out of 250 bytes for memcached, since it invoke a lot of prefixing and so on.

Comment by Mark [ 14/Jun/15 ]

http://www.doctrine-project.org/jira/browse/DDC-3771





[DDC-3760] [GH-1418] Remove (useless?) call to parser::getLexer() Created: 08/Jun/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of mageekguy:

Url: https://github.com/doctrine/doctrine2/pull/1418

Message:

The `$lexer` variable is not used, the method `parser::getLexer()` is just a dumb getter and do nothing, so in my opinion, the call to `parser::getLexer()` is useless in this context.

Can you confirm?



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1418] was merged:
https://github.com/doctrine/doctrine2/pull/1418





[DDC-3759] QueryBuilder crash with a negative value on a WHERE IN expression Created: 07/Jun/15  Updated: 07/Jun/15

Status: Reopened
Project: Doctrine 2 - ORM
Component/s: DQL
Affects Version/s: 2.5, 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Sullivan SENECHAL Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: dql, mysql


 Description   

Here the following piece of code to reproduce.

$qb = $this->getDoctrine()->getRepository('AppBundle:Server')->createQueryBuilder('s');
$qb->where($qb->expr()->in('s.status', [-1]));
$servers = $qb->getQuery()->execute();

Throw the following error:

QueryException: [Syntax Error] line 0, col 149: Error: Expected Literal, got '-'

But the DQL seems to be OK (tested manually on PMA):

SELECT s FROM AppBundle\Entity\Server s WHERE s.status IN(-1)

You can get this error also by calling `getSQL`:

$qb->getQuery()->getSQL();

Possibly affect 2.3 and 2.4 versions also, found this error a while ago but was thinking about an another vendor issue: https://github.com/sonata-project/SonataAdminBundle/issues/1061 (Dec 11, 2012)



 Comments   
Comment by Marco Pivetta [ 07/Jun/15 ]

This usage is incorrect. You are doing:

$qb->where($qb->expr()->in('s.status', [-1]));

Assuming that this means that some parameter binding is going on. Instead, an array to string cast is what you get.

The correct usage is:

$qb->where($qb->expr()->in('s.status', ':status'));
$qb->setParameter('status', [-1], Connection::PARAM_INT_ARRAY);
Comment by Sullivan SENECHAL [ 07/Jun/15 ]

Thanks for your quick answer.

So I'm not authorized to pass value directly?

So, can you explain me why this:

$qb->where($qb->expr()->in('s.status', [1]));

Works perfectly?

Your second solution works for negative value. Just a reminder for other: Don't forget this use statement:

use Doctrine\DBAL\Connection;
Comment by Sullivan SENECHAL [ 07/Jun/15 ]

BTW, `Connection::PARAM_INT_ARRAY` is not required to get it working.

Comment by Marco Pivetta [ 07/Jun/15 ]

So I'm not authorized to pass value directly?

No, it's not designed to work like that. The second parameter is supposed to be a string or an expression, not a value.

This works by luck:

$qb->where($qb->expr()->in('s.status', [1]));

The parser simply doesn't understand negative numbers in this context, but it shouldn't either: parameter binding is the way to go here.

Comment by Marco Pivetta [ 07/Jun/15 ]

Actually, I'm going to reopen the issue: negative values should be allowed by the parser, but parameter binding is still supposed to be the correct way of handling this kind of situation.

Comment by Marco Pivetta [ 07/Jun/15 ]

BTW, `Connection::PARAM_INT_ARRAY` is not required to get it working.

Please do use it, or you will have nasty cast bugs at PDO level.





[DDC-3758] Transactional parallelism Created: 07/Jun/15  Updated: 07/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Facundo Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: transactions
Environment:

Software platform



 Description   

Assuming that I am in an application that supports concurrency, as most Web applications, this is the problem:

The transactions do not currently have an execution context.
To work with a transaction I must do the following:

$em-> getConnection () -> beginTransaction (); // Auto-commit suspend
try {
    // ... Do some work
    $ user = new User;
    $ user-> setName ('George');
    $ em-> persist ($ user);
    $ em-> flush ();
    $ em-> getConnection () -> commit ();
} catch (Exception $ e) {
    $em-> getConnection () -> rollback ();
    throw $e;
}

But what if another (parallel) request executes "flush" before it?

I think that the problem is because the transaction lives in the context of the EntityManager. Because of that any need to "flush" apply to that object.

The best thing would be to do something like:

$transaction = $em-> getConnection () -> CreateTransaction (); // Auto-commit suspend
try {
    // ... Do some work
    $user = new User;
    $user-> setName ('George');
    $transaction-> persist ($ user);
    $transaction-> flush ();
    $transaction-> commit ();
} catch (Exception $ e) {
    $transaction-> rollback ();
    throw $ e;
}


 Comments   
Comment by Marco Pivetta [ 07/Jun/15 ]

Facundo I don't understand the question. Are you aware that EntityManager#flush() implicitly starts a new transaction?

Comment by Facundo [ 07/Jun/15 ]

Marco, all the changes I do in the EntityManager until call flush or commit, are collected by the EntityManager. This is dangerous in a web application, where the requests can imply a race condition.

The changes are not collected in any transaction abstracrion and the state of the EntityManager is what realy modify.

Comment by Marco Pivetta [ 07/Jun/15 ]

There's your confusion

In Doctrine, the EntityManager IS the abstraction of a transaction.

This may be changed in future, when we'll maybe have different sessions/transactions spawned from the EntityManager, but right now the EntityManager is your transaction.

Comment by Facundo [ 07/Jun/15 ]

Oh, thanks for the answer.

Last think... I'm using Symfony, do you know if the getManager method return allways the same object? Because in that case I don't know how to resolver that problem.

Comment by Marco Pivetta [ 07/Jun/15 ]

Yes, in symfony, getManager will give you the same instance over multiple calls.

A good way to solve the problem is to force a transaction around your controller dispatch logic - that creates a "safe bubble" where you can operate quite safely.

Comment by Facundo [ 07/Jun/15 ]

That's the race condition I'm talking about.
If I have 2 actions and both call beginTransaction, in a race condition can be interpreted as nested transactions instead of paralell transactions.

Comment by Marco Pivetta [ 07/Jun/15 ]

If I have 2 actions and both call beginTransaction, in a race condition can be interpreted as nested transactions instead of paralell transactions.

They happen on different processes anyway, so the nesting level is not relevant.





[DDC-3757] [GH-1417] Generator: Associations annotations improvement Created: 06/Jun/15  Updated: 06/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: Git Master
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Minor
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 1
Labels: annotation, orm


 Description   

This issue is created automatically through a Github pull request on behalf of Soullivaneuh:

Url: https://github.com/doctrine/doctrine2/pull/1417

Message:

  • [ ] Replace `Doctrine\Common\Collections\Collection` by `RelatedEntity[]|\Doctrine\Common\Collections\ArrayCollection`
  • [ ] Add `use` statement for related entities and ArrayCollection
  • [ ] Remove FQN annotation usage

This is a proposal for association mapping annotations improvement.

In a nutshell, I replaced `Collection` by `ArrayCollection` on getter annotation because `ArrayCollection` is used on constructor. I also add `RelatedEntity[]` annotation which is more IDE friendly.

I'm planning to add `use` statement too for FQN usage avoiding.

If you this made some regressions, we could maybe introduce it as an option.

Regards






[DDC-3756] [GH-1416] [2.5][Bug] Fix ConvertDoctrine1Schema->getMetadata Created: 05/Jun/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: 2.5.1, 2.6.0
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of Restless-ET:

Url: https://github.com/doctrine/doctrine2/pull/1416

Message:

This bug was introduced at #1205 while resolving #1200.



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1416] was merged:
https://github.com/doctrine/doctrine2/pull/1416





[DDC-3755] Flushing a single entity does not cascade flushes Created: 03/Jun/15  Updated: 03/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Kris Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

I have a bidirectional onetoone entities set up like this

class user

@OneToOne(targetEntity="Address", inversedBy="user",  cascade={"persist"})
$address

class Address

@OneToOne(targetEntity="User", mappedBy="address")
$user

@Column()
$city

Now say I saved a new user

$user = new User();
$address = new Address();
$address->setCity("Chicago");
$user->setAddress($address);
$em->persist($user);
$em->flush($user);

I get the expected result saved to the database.
Now say I want to update the city

$address = $user->getAddress()
$address->setCity("new york");
$user->setAddress($address);
$em->persist($user);
$em->flush($user);

The updated address information does not save even though cascade persist is enabled. I need to do a full flush ($em->flush()) for it to save properly

I would think since it does cascade the insert, that it should also cascade the update?

So Expected result:
Address information is saved to database

Actual Result:
Address information is not saved to the database






[DDC-3754] Entity cloning Created: 03/Jun/15  Updated: 03/Jun/15  Resolved: 03/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Evgen Assignee: Benjamin Eberlei
Resolution: Invalid Votes: 0
Labels: proxy


 Description   

Sometimes doctrine query results proxy objects, even if them loaded directly. Proxy class overriding _clone method, so i can't reset id fields for it.I used another method "_clone_again_for_random_proxified_entity" to reset image id, but i'm sure its not the way this shuld work.
My code as example:

             $imgs = $this->getService('doctrine')->getQueryBuilder()
                    ->select('i')
                    ->from('Page\\Image', 'i')
                    ->where('i.page=:p')
                    ->getQuery()
                    ->setParameter('p',$source)
                    ->getResult();
                foreach($imgs as $img){
                    $copy = clone $img;
                    if(is_callable([$img, '__isInitialized'])){ //is a proxy
                        $copy->__clone_again_for_random_proxified_entity();
                    }
                    $entity->addPart($copy);
                }

i wasted half of day to catch collction with proxified entity (i think its loaded some where before as a proxy and then initialized on query)
i think its easy to fix by adding parent::__clone call on a proxy objects and avoid this kind of bugs. Thanks.



 Comments   
Comment by Marco Pivetta [ 03/Jun/15 ]

parent::__clone should actually be in the proxies. If that's not the case, then please write a test case against https://github.com/doctrine/common

See also https://github.com/doctrine/common/blob/ff72726b0876638fa7db2f28b0f26e3f1f6656ca/tests/Doctrine/Tests/Common/Proxy/ProxyMagicMethodsTest.php#L216-L231

Comment by Evgen [ 03/Jun/15 ]

Manual proxy regeneration solved this problem. Thanks a lot.





[DDC-3753] ManyToMany Relations from Value objects Created: 03/Jun/15  Updated: 03/Jun/15  Resolved: 03/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Maximilian Bosch Assignee: Marco Pivetta
Resolution: Invalid Votes: 0
Labels: mapping, mysql, orm
Environment:

Ubuntu 14.04 (Virtualbox)/PHP 5.5.25/MySQL 5.5.43


Attachments: PNG File doctrine-user.PNG     PNG File doctrine-userdetails.PNG     PNG File doctrine-vm.PNG    

 Description   

I was trying to setup a many-to-many and a one-to-one relation from an embeddable object, but doctrine ignores these relation columns/tables (see screenshots).
As you can see, I've created a relation for followers called SEN_Following and SEN_UserToRole, but when reviewing the tables on the mysql, these tables are not shown.

When executing "php app/console doctrine:schema:update" I get the following message:
Nothing to update - your database is already in sync with the current entity metadata.



 Comments   
Comment by Maximilian Bosch [ 03/Jun/15 ]

in order to review the whole code, I've pushed to a remote feature branch on github: https://github.com/Ma27/SenNetwork/tree/SenNetwork-108

Comment by Marco Pivetta [ 03/Jun/15 ]

Value Objects should not reference entities in any case.

Comment by Maximilian Bosch [ 03/Jun/15 ]

ok thanks.

but just out of interest: why shouldn't they do??

Comment by Marco Pivetta [ 03/Jun/15 ]

Maximilian Bosch a value object can be compared with another value object by its value, whereas an entity is compared via identifier.

If you include an entity inside your VO you are comparing also the entity state (which is not comparable except for the identifier), and that breaks the entire idea of VO.

VOs should only reference other VOs and primitive types.

Comment by Maximilian Bosch [ 03/Jun/15 ]

Marco Pivetta thank you for your explanation.
but is there a way, how to persist collections inside a value objects??

serialization is IMHO a bad idea. For example I'd like to create a list which shows all users having a specific role, I had to load all users and the UserDetail object and check if they have the value object. With another table I could write a query for that.

Comment by Marco Pivetta [ 03/Jun/15 ]

but is there a way, how to persist collections inside a value objects??

currently not, and I'd still suggest serialization as a fallback (serialization is usually supported by VOs)

Comment by Maximilian Bosch [ 03/Jun/15 ]

Marco Pivetta ok thank you for your help.

I think the simplest solution is moving these relations into the entity and waiting for that feature.
The problem I'll ran into with serialization is that it's virtually impossible to query against a serialized string





[DDC-3752] no walkers for WhenClauseExpression Created: 01/Jun/15  Updated: 01/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: DQL, ORM, Tools
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Jurj Alin Assignee: Guilherme Blanco
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Fatal error: Call to undefined method Application\Extended\Doctrine\Walkers\Custom::walkWhenClauseExpression() in vendor/doctrine/orm/lib/Doctrine/ORM/Query/AST/WhenClause.php on line 60






[DDC-3751] [GH-1415] [DDC-3750] EntityGenerator::hasMethod returns true for abstract methods Created: 29/May/15  Updated: 06/Jun/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of Lewik:

Url: https://github.com/doctrine/doctrine2/pull/1415

Message:

Fixed. May be hasProperties must return false for abstract too?



 Comments   
Comment by Lev Shagalov [ 06/Jun/15 ]

what is AWAITING FEEDBACK ?





[DDC-3750] EntityGenerator::hasMethod returns true, if target class extends abstract with abstract target method Created: 29/May/15  Updated: 06/Jun/15

Status: Awaiting Feedback
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: Git Master
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Lev Shagalov Assignee: Steve Müller
Resolution: Unresolved Votes: 0
Labels: None


 Description   

abstract class AbstractClass

{ abstract public function getId(); }

I what to generate myEntity class that extends abstractClass (or implement interface with getId). myEntity have id and other properties and I what to generate setters/getters. EntityGenerator will skip generation getId method, because hasMethod will return true for abstract method.



 Comments   
Comment by Lev Shagalov [ 06/Jun/15 ]

what is AWAITING FEEDBACK ?





[DDC-3749] [GH-1414] Added: A public SQLFilter Hash Function Created: 29/May/15  Updated: 29/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of nea:

Url: https://github.com/doctrine/doctrine2/pull/1414

Message:

Hi

To be more flexible from a custom SQLFilter perspective, a dedicated hash function was added, which is not final and can be used by any implementing class to manipulate their e.g. caching behaviour.

The idea came from the event of having a query cache running and a filter, requiring to add actual current timestamps to the queries for comparison purposes (i.e. SoftDeleteable). As the old timestamps are cached too and the parser not fired again, old entities were returned.

As the cache id is based also on the filters hash, a quick and I think good, slick solution would be to add a Hash Function that can be manipulated by an owning filter, to handle its behaviour on its own.

It defaults back to __toString and therefore nothing changes in basics but it could be.

Cheers

Changes:

  • Added: A public SQLFilter Hash Function (defaults to __toString)
  • Changed: FilterCollection to use the newly added SQLFilter Hash Function





[DDC-3748] [GH-1413] Added to_char function to convert other types to chars (/strings). Created: 27/May/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Won't Fix Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of ahuemmer:

Url: https://github.com/doctrine/doctrine2/pull/1413

Message:

Been missing the TO_CHAR function, which - under some circumstances - is needed in platforms like Oracle, e. g. to compare char and non-char fields. Have added it - hope, it is OK this way!






[DDC-3747] Embeddables should not conatain Id definitions Created: 27/May/15  Updated: 27/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Albert Casademont Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Hi! I have an Sku entity which contains an SkuId embeddable object, which is an Id for the Sku entity. At the same time, the Sku entity also contains a ProductId embeddable which is an Id for the Product entity, not the Sku. But as the Id definition is inside the embeddable, I can't embed the ProductId class in the Sku entity because Doctrine thinks this is a composite primary key, which breaks quite a lot of things.

mapping.yml
Sku\Sku:
  type: entity
  fields:
    name:
      type: string
      length: 100
  embedded:
    skuId:
      class: Ulabox\Inventory\Domain\Model\Sku\SkuId
      columnPrefix: false
    productId:
      class: Ulabox\Inventory\Domain\Model\Product\ProductId
      columnPrefix: product_
Sku\SkuId:
  type: embeddable
  id:
    id:
      type: guid
Product\ProductId:
  type: embeddable
  id:
    id:
      type: guid

I've switched to using custom types for this "class Id's" but I think that the Id definition should be separated from the Embeddable definition because sometimes an Embeddable might be the Id of an entity, but it also could be a simple field, which is not possible right now. Maybe some kind of "type" attribute in the "embedded" definition that could mark if the Embeddable fields are going to be used as simple fields or id fields

mapping.yml
Sku\Sku:
  type: entity
  fields:
    name:
      type: string
      length: 100
  embedded:
    skuId:
      type: id
      class: Ulabox\Inventory\Domain\Model\Sku\SkuId
      columnPrefix: false
    productId:
      class: Ulabox\Inventory\Domain\Model\Product\ProductId
      columnPrefix: product_
Sku\SkuId:
  type: embeddable
  fields:
    id:
      type: guid
Product\ProductId:
  type: embeddable
  fields:
    id:
      type: guid





[DDC-3746] lack of flexibility in persisters Created: 25/May/15  Updated: 25/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: KonstantinKuklin Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

I tried to implement driver for HandlerSocket protocol, which is mysql nosql plugin.

BasicEntityPersister is a problem - it fully depends(and others and more) on SQL.
I can`t say to Doctrine, how the data must be fetched from my own Driver.
I think it is a logical mistake, such logic(creating query to DB) must be inside a db driver bridge.
I found two solution:
1) Get persisters configurable from entity manager config
2) Try to find persisters inside the DBAL driver

What do u think about it?

Thanks, Konstantin.






[DDC-3745] OneToOne identity through foreign entity exception on flush Created: 22/May/15  Updated: 22/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Dawid Nowak Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Also asked at SO: https://stackoverflow.com/questions/30402203
I'm adding it here as well as an issue here, because I believe it just might be Doctrine's bug.


I have `User` and `UserProfile` OneToOne–related Doctrine ORM entities. They should always exist as a pair, there should be no `User` without `UserProfile`.

User should get its id from autoincrement, while UserProfile should have User's id. So they both should have the same id and there is no other column to set up the relationship ([Doctrine docs: Identity through foreign Entities](https://doctrine-orm.readthedocs.org/en/latest/tutorials/composite-primary-keys.html#identity-through-foreign-entities)).

User's id is both a primary key (PK) and foreign key (FK) at the same time.

I managed to set it up, but it requires that User is saved first and only later UserProfile is created and saved in a separate step.

What I want is that UserProfile is always created with User, in the constructor, but if I do that, I get this exception:

`Doctrine\ORM\ORMInvalidArgumentException: The given entity of type 'AppBundle\Entity\UserProfile' (AppBundle\Entity\UserProfile@0000000052e1b1eb00000000409c6f2c) has no identity/no id values set. It cannot be added to the identity map.`

Please see code below – it works, but not the way I want. The php comments show what I want to achieve.

Test.php
    /**
     * It works, both saving and loading.
     * BUT, it requires that I create and save UserProfile 
     * in a separate step than saving User step.
     */
    
    // create and save User
    $user = new User();
    $objectManager->persist($user);
    $objectManager->flush();
    
    // create and save UserProfile (this should be unnecessary)
    $user->createProfile()
    $objectManager->flush();
User.php
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository")
     * @ORM\Table(name="users")
     */
    class User
    {
    	/**
    	 * @var int
    	 *
    	 * @ORM\Column(name="uid", type="integer")
    	 * @ORM\Id
    	 * @ORM\GeneratedValue(strategy="AUTO")
    	 */
    	private $id;
    	
    	/**
    	 * It's NULL at first, I create it later (after saving User).
    	 * 
    	 * @var UserProfile|null
    	 *
    	 * @ORM\OneToOne(targetEntity="UserProfile", mappedBy="user", cascade="persist")
    	 */
    	private $profile = null;
    	
    	public function __construct()
    	{
    		// I want to create UserProfile inside User's constructor,
    		// so that it is always present (never NULL):
    		//$this->profile = new UserProfile($this);
    		
    		// but this would give me error:
    		//
    		// Doctrine\ORM\ORMInvalidArgumentException: 
    		// The given entity of type 'AppBundle\Entity\UserProfile' 
    		// (AppBundle\Entity\UserProfile@0000000058af220a0000000079dc875a)
    		// has no identity/no id values set. It cannot be added to the identity map.
    	}
    
    	public function createProfile()
    	{
    		$this->profile = new UserProfile($this);
    	}	
    }
UserProfile.php
    
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="profiles")
     */
    class UserProfile
    {
    	/**
    	 * – UserProfile's "uid" column points to User's "uid" column
    	 * – it is PK (primary key)
    	 * - it is FK (foreign key) as well
    	 * – "owning side"
    	 *
    	 * @var User
    	 *
    	 * @ORM\Id
    	 * @ORM\OneToOne(targetEntity="User", inversedBy="profile")
    	 * @ORM\JoinColumn(name="uid", referencedColumnName="uid", nullable=false)
    	*/
    	private $user;
        
    	public function __construct(User $user)
    	{
    		$this->user = $user;
    	}    
    }





[DDC-3744] [GH-1412] Added RANDOM() function to DQL Created: 22/May/15  Updated: 16/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: New Feature Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of cverges-ch:

Url: https://github.com/doctrine/doctrine2/pull/1412

Message:

Corresponds with generic platform support for a random number generator mechanism typically implemented by most DBMS.

See pull request at https://github.com/doctrine/dbal/pull/865

Use of RAND(), random(), DBMS_RANDOM.VALUE, or whatever the platform provides as a random number generator can be essential to some business logic. This adds generic platform support for this mechanism and introduces a new DQL keyword "RANDOM()".

DBAL: https://github.com/doctrine/dbal/pull/865
DQL: https://github.com/doctrine/doctrine2/pull/1412



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1412] was closed:
https://github.com/doctrine/doctrine2/pull/1412





[DDC-3743] There is a BC break in the ORM 2.5 in the DQL parser Created: 22/May/15  Updated: 28/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: DQL
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Critical
Reporter: Christophe Coevoet Assignee: Guilherme Blanco
Resolution: Unresolved Votes: 0
Labels: dql


 Description   

The following DQL query is working fine on 2.4 but breaks on 2.5:

SELECT COUNT(l) FROM Incenteev\WebBundle\Entity\Discussion\Liker l INNER JOIN l.message m INNER JOIN m.thread t WHERE t.space IN (:space_ids) AND l.date >= :from

This is the exception triggered in 2.5:

[Semantical Error] line 0, col 13 near 'l) FROM Incenteev\WebBundle\Entity\Discussion\Liker': Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

The exception happens in Parser->processDeferredPathExpressions.

The Liker class has a compound identifier based on 2 relations.

I suspect it is related to https://github.com/doctrine/doctrine2/pull/1122



 Comments   
Comment by Christophe Coevoet [ 22/May/15 ]

I'm not sure it is a BC break though. Looking at the SQL generated in 2.4, it was not counting the right thing (is was counting only the message ids, not the combination message id/user id being the primary key.

Comment by Christophe Coevoet [ 28/May/15 ]

Actually, it was counting the right thing when not using DISTINCT (the 2.4 generated SQL was broken for DISTINCT though)

Comment by Guilherme Blanco [ 28/May/15 ]

Yep, that PR was the culript. I can look into this issue later.





[DDC-3742] Use UTCDatetimeType with lifecycle callbacks Created: 22/May/15  Updated: 22/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4.7
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: pablo Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: dbal, orm
Environment:

Fedora 20 x64 with Phalcon 2.0 and doctrine downloaded via composer:
"doctrine/orm": "2.*",
"doctrine/mongodb-odm": "dev-master",



 Description   

I'm trying to save my entities (yaml), which have lifecyclecallbacks with a createdAt and updatedAt UTCDatetimeType fields. If I save them with prePersist or preUpdate, the insert of new rows into the mysql database fails because of blank date fields, but they are already populated in my entity.

If I replace the UTCDateTimeType by datetime, it works.



 Comments   
Comment by pablo [ 22/May/15 ]

I'm using UTCDateTimeType from: http://doctrine-orm.readthedocs.org/en/latest/cookbook/working-with-datetime.html

It makes a $value->format($format, $timezone)

I was passing a \Datetime object, so format only has one parameter, not 2...Then, Or I'm passing an unexpected $value or the format method is not properly coded there.

So, I've modified convertToDatabaseValue to the following:

        if ($value === null) {
            return null;
        }

        if (is_null(self::$utc)) {
            self::$utc = new \DateTimeZone('UTC');
        }

        if (!($value instanceof \DateTime)) {
            $value = \DateTime::createFromFormat(
                $platform->getDateTimeFormatString(),
                $value,
                self::$utc
            );
        }

        $value->setTimeZone(self::$utc);

        $val = $value->format($platform->getDateTimeFormatString());

        return $val;
Comment by Marco Pivetta [ 22/May/15 ]

pablo what exactly is the action to be taken here? It's unclear to me.

Comment by pablo [ 22/May/15 ]

I replaced the metod convertToDatabaseValue from http://doctrine-orm.readthedocs.org/en/latest/cookbook/working-with-datetime.html with mine.

For example:

<code>
date_default_timezone_set('Europe/Madrid');
$expireAt = new \DateTime();
$entity = newEntity();
$entity->setExpireAt($expireAt);

$this->em->persist($entity);
$this->em->flush();
</code>

My expireAt field is UTCDateTimeType, so it will be converted from my Europe/Madrid timezone to UTC. But using the code from URL it doesn't works because ->format() method has 2 parameters instead of one.





[DDC-3741] [GH-1411] Allow null to be passed to setHydrationCacheProfile Created: 20/May/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of icambridge:

Url: https://github.com/doctrine/doctrine2/pull/1411

Message:

Currently null can be passed and is set as default, however if you do this you get an exception. This allows null to be passed and set.

There is an if statement later on to see if $this->_hydrationCacheProfile is null so it seems logical you can set it to be null.



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1411] was merged:
https://github.com/doctrine/doctrine2/pull/1411





[DDC-3740] \Doctrine\ORM\LazyCriteriaCollection::count() returns "0" instead of 0 Created: 16/May/15  Updated: 16/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Carsten Bleicker Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Getting the count of a LazyCriteriaCollection results in numerical string instead of integer.






[DDC-3739] [GH-1410] Skip generate lifecycle methods if they already generated Created: 15/May/15  Updated: 15/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of aivus:

Url: https://github.com/doctrine/doctrine2/pull/1410

Message:

This happens when I use one lifecycle method in prePersist and preUpdate together. Like
```yml
lifecycleCallbacks:
prePersist: [setCreatedAtValue, setUpdatedAtValue]
preUpdate: [setUpdatedAtValue]
```

Before generator generate two methods with the same names.

@Ocramius, what do you think what is better way to write test for this?
Should I test generateEntityLifecycleCallbackMethods directly?






[DDC-3738] [GH-1409] Added PHPDoc return type false of next method in Hydration/IterableResult Created: 15/May/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of haeber:

Url: https://github.com/doctrine/doctrine2/pull/1409

Message:

Because hydrateRow can return false, too. The PHPDoc return type of the next method has return false in addition to array.



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1409] was merged:
https://github.com/doctrine/doctrine2/pull/1409





[DDC-3737] [GH-1408] [doc] Remove unused variable from sample code Created: 14/May/15  Updated: 14/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of baileylo:

Url: https://github.com/doctrine/doctrine2/pull/1408

Message:

Removes lexer since it's not used.






[DDC-3736] Support for Objects as Identifiers with Strategy AUTO Created: 14/May/15  Updated: 14/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Improvement Priority: Major
Reporter: Andrei Mocanu Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

According to the official documentation (http://doctrine-orm.readthedocs.org/en/latest/changelog/migration_2_5.html#support-for-objects-as-identifiers) using objects as Identifiers work .

The issue is that if in the mapping settings generator strategy is set to AUTO, the BasicEntityPersister won't hydrate the id to an Object , but keep it as a scalar.

\\Doctrine\ORM\Persisters\Entity::executeInserts() , line 257
$generatedId = $idGenerator->generate($this->em, $entity);
$id = array(
    $this->class->identifier[0] => $generatedId
);
$postInsertIds[] = array(
    'generatedId' => $generatedId,
    'entity' => $entity,
);

This could be tracked down to the IdGenerator :

\\Doctrine\ORM\Id\IdentityGenerator::generate() , line 53
public function generate(
        EntityManager $em, $entity)
    {
        return (int)$em->getConnection()->lastInsertId($this->sequenceName);
    }


 Comments   
Comment by Andrei Mocanu [ 14/May/15 ]

Workaround:

id:
        id:
            type: UserId
            column: id
            generator:
                strategy: CUSTOM
            customIdGenerator:
                class: MyApp\ORM\Id\ObjectIdentityGenerator

Create a ObjectIdentityGenerator that extends AbstractIdGenerator and implement generate:

public function generate(
        EntityManager $em, $entity)
    {
        $entityClass = get_class($entity);
        $idFieldName = $em->getClassMetadata($entityClass)->getSingleIdentifierColumnName();
        $reflection = new ReflectionClass($entityClass);
        $params = $reflection->getConstructor()->getParameters();
        foreach ($params AS $param) {
            if ($param->getName() === $idFieldName && $idClass = $param->getClass()) {
                return new $idClass->name((int) $em->getConnection()->lastInsertId($this->sequenceName));
            }
        }
        return (int)$em->getConnection()->lastInsertId($this->sequenceName);
    }




[DDC-3735] Problem with Collate Created: 13/May/15  Updated: 13/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers, ORM
Affects Version/s: 2.5
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Hugo Henrique Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: dbal, mapping, mysql, schematool
Environment:

development



 Description   

I'm using Migrations and always when a new version changes in my schema in action `up` SQL removes the definition of the table COLLATE for example:

Version20150513194922.php
public function up(Schema $schema)
{
    $this->addSql('ALTER TABLE customer CHANGE user_id user_id CHAR(36) DEFAULT NULL COMMENT \'(DC2Type: guid)\'');
}

public function down(Schema $schema)
{
    $this->addSql('ALTER TABLE customer CHANGE user_id user_id CHAR(36) NULL DEFAULT COLLATE utf8_unicode_ci COMMENT \'(DC2Type: guid)\'');
}
User.php
/**
 * @ORM\Table(name="user")
 * @ORM\HasLifecycleCallbacks
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\Column(type="guid", options={"unsigned"=true})
     * @ORM\GeneratedValue(strategy="UUID")
     */
    protected $id;

Customer.php
/**
 * @ORM\Entity
 * @ORM\Table(name="customer")
 */
class Customer
{
    /**
     * @ORM\Id
     * @ORM\Column(type="bigint", options={"unsigned"=true})
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;

schema.sql
CREATE TABLE `user` (
  `id` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '(DC2Type:guid)',
  `name` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `username` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `username_canonical` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email_canonical` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `salt` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_8D93D649E7927C74` (`email`),
  UNIQUE KEY `UNIQ_8D93D649F85E0677` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `customer` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '(DC2Type:guid)',
  `gender` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
  `zipcode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_705B3727A76ED395` (`user_id`),
  CONSTRAINT `FK_705B3727A76ED395` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;





[DDC-3734] [GH-1407] Add return to removeMethodTemplate Created: 13/May/15  Updated: 13/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of aivus:

Url: https://github.com/doctrine/doctrine2/pull/1407

Message:






[DDC-3733] [GH-1406] add default value for GeneratedValue Created: 12/May/15  Updated: 16/Jun/15  Resolved: 16/Jun/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of XitasoChris:

Url: https://github.com/doctrine/doctrine2/pull/1406

Message:

The "strategy" attribute on the GeneratedValue annotation is actually not required but optional. It works fine when the attribute is not specified.

The default value for this attribute is AUTO.



 Comments   
Comment by Doctrine Bot [ 16/Jun/15 ]

A related Github Pull-Request [GH-1406] was merged:
https://github.com/doctrine/doctrine2/pull/1406





[DDC-3732] Entity with string @id can't be fetches Created: 10/May/15  Updated: 11/May/15  Resolved: 10/May/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: Git Master
Fix Version/s: None
Security Level: All

Type: Bug Priority: Blocker
Reporter: Peter Zwegat Assignee: Marco Pivetta
Resolution: Invalid Votes: 0
Labels: mysql, orm
Environment:

MySQL



 Description   

I defined an entity id field with the annotation:

@ORM\Id
@ORM\Column(type="string", length=2)

It's not possible to fetch the entity neither with ->find() nor manually with a query builder (quoted etc., tried everything).

$qb->where('l.id = ?1');
$qb->setParameters([
1 => $this->getEntityManager()->getConnection()->quote($id)
]);

This return just null even if the entity with the given id exists.

When I not quote the passed id value it, I become this error:

Doctrine\ORM\Query\QueryException: [Semantical Error] line 0, col 121 near 'fi': Error: 'fi' is not defined. (/..../vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php: 63)

'fi' ist just the country identifier here that is the entity id.



 Comments   
Comment by Marco Pivetta [ 10/May/15 ]

Quoting parameters explicit is not necessary.

Also, quoting parameters is not needed in DQL, as DQL is translated by looking at mappings anyway.

Comment by Peter Zwegat [ 10/May/15 ]

Yeah I only quoted the id for test purposes.
I go a step back:
->find('de') throws the exception that I posted in the issue.

String Id's are possible normally not?

Comment by Marco Pivetta [ 10/May/15 ]

Peter Zwegat yes, it is allowed, but what exception are you getting?

Comment by Peter Zwegat [ 11/May/15 ]

This one when I try to find an entity by it's id:

Doctrine\ORM\Query\QueryException: [Semantical Error] line 0, col 121 near 'fi': Error: 'fi' is not defined. (/..../vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php: 63)

'fi' is here the key. Just used the ->find method.

Comment by Marco Pivetta [ 11/May/15 ]

Please show some actual code in a gist - I'm doing guesswork here :-P





[DDC-3731] [GH-1405] EntityManager#getReference throw ORMException for unrecognized id Created: 09/May/15  Updated: 09/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of taueres:

Url: https://github.com/doctrine/doctrine2/pull/1405

Message:

  • Unreachable statements have been removed
  • Throw ORMException for unrecognized identifier field (same
    behavior as EntityManager#find)


 Comments   
Comment by Doctrine Bot [ 09/May/15 ]

A related Github Pull-Request [GH-1405] was labeled:
https://github.com/doctrine/doctrine2/pull/1405

Comment by Doctrine Bot [ 09/May/15 ]

A related Github Pull-Request [GH-1405] was assigned:
https://github.com/doctrine/doctrine2/pull/1405





[DDC-3730] Embeddable hydrates to object instead of null Created: 08/May/15  Updated: 28/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Paul Cioanca Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Good afternoon,

When hydrating an Embeddable with nullable attributes the result is an instance of the Embeddable class , this is obviously correct and expected behavior.

If all the attributes are null the hydrator will still return an instance of the class with all of its properties null , even if I persist and flush my Entity with the Embeddable being set as null .

For clarification :


class MyEntity
{
    protected $myEmbeddable;

    public function setMyEmbeddable(MyEmbeddable $myEmbeddable = null)
    {
        $this->myEmbeddable = $myEmbeddable;
    }
    [...]
}

$newEntity = new MyEntity();
$newEntity->setMyEmbeddable(null);

$em->persist($newEntity);
$em->flsuh($newEntity);

Calling $newEntity->getMyEmbeddable() will return an instance of the MyEmbeddable object with all of it's attributes set to null .

I expected $newEntity->getMyEmbeddable() to be NULL .

Can someone clarify is this is expected behaviour ? In case it is , how can I achieve what I'm looking for ?

Best regards



 Comments   
Comment by Eugene Dounar [ 28/Jul/15 ]

See https://github.com/doctrine/doctrine2/pull/1275





[DDC-3729] [GH-1404] Fix PHPDoc typo Created: 07/May/15  Updated: 07/May/15  Resolved: 07/May/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: 2.5
Fix Version/s: 2.6.0
Security Level: All

Type: Documentation Priority: Trivial
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: docblock, entitymanager, typo


 Description   

This issue is created automatically through a Github pull request on behalf of stephan281094:

Url: https://github.com/doctrine/doctrine2/pull/1404

Message:

Title says all.



 Comments   
Comment by Doctrine Bot [ 07/May/15 ]

A related Github Pull-Request [GH-1404] was assigned:
https://github.com/doctrine/doctrine2/pull/1404





[DDC-3728] [GH-1403] Typo in PHPDoc Created: 07/May/15  Updated: 07/May/15  Resolved: 07/May/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Documentation Priority: Trivial
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Invalid Votes: 0
Labels: docblock, entitymanager, phpdoc, typo


 Description   

This issue is created automatically through a Github pull request on behalf of stephan281094:

Url: https://github.com/doctrine/doctrine2/pull/1403

Message:



 Comments   
Comment by Doctrine Bot [ 07/May/15 ]

A related Github Pull-Request [GH-1403] was closed:
https://github.com/doctrine/doctrine2/pull/1403





[DDC-3727] [GH-1402] AbstractCommand: use name of helper, do not require alias Created: 05/May/15  Updated: 05/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of TomasVotruba:

Url: https://github.com/doctrine/doctrine2/pull/1402

Message:

Name for the helper is "entityManager", see https://github.com/doctrine/doctrine2/blob/330f88e44ba0e5e6f932a92ae63b64cdd5cdc046/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php#L70

Using "em" forces creating an alias.

Seems like some forgotten name change.






[DDC-3726] [GH-1401] Remove HHVM-nightly builds Created: 05/May/15  Updated: 06/May/15  Resolved: 05/May/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: build-speed, ci, hhvm, hhvm-nightly, travis

Issue Links:
Reference
is referenced by DBAL-1226 [GH-853] Remove HHVM-nightly builds Resolved

 Description   

This issue is created automatically through a Github pull request on behalf of stof:

Url: https://github.com/doctrine/doctrine2/pull/1401

Message:

hhvm-nightly is not available anymore on Travis because HHVM dropped support for Ubuntu Precise, which is still used by Travis.

This avoids creating useless jobs in the matrix which are killed by Travis from the start.



 Comments   
Comment by Doctrine Bot [ 05/May/15 ]

A related Github Pull-Request [GH-1401] was assigned:
https://github.com/doctrine/doctrine2/pull/1401

Comment by Doctrine Bot [ 05/May/15 ]

A related Github Pull-Request [GH-1401] was labeled:
https://github.com/doctrine/doctrine2/pull/1401

Comment by Doctrine Bot [ 05/May/15 ]

A related Github Pull-Request [GH-1401] was merged:
https://github.com/doctrine/doctrine2/pull/1401





[DDC-3725] [GH-1400] pgsql and mysqli are supported by HHVM Created: 04/May/15  Updated: 16/Jul/15  Resolved: 16/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: None
Fix Version/s: 2.6.0
Security Level: All

Type: Improvement Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Fixed Votes: 0
Labels: ci, hhvm, misqli, travis


 Description   

This issue is created automatically through a Github pull request on behalf of photodude:

Url: https://github.com/doctrine/doctrine2/pull/1400

Message:



 Comments   
Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1400] was assigned:
https://github.com/doctrine/doctrine2/pull/1400

Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1400] was labeled:
https://github.com/doctrine/doctrine2/pull/1400

Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1400] was merged:
https://github.com/doctrine/doctrine2/pull/1400





[DDC-3724] Resolve target entity also in discriminator map: does not work with non-alphabetical order Created: 04/May/15  Updated: 04/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Alan Poulain Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: None


 Description   

Using a discriminator map and interfaces lead to an exception when there are not in alphabetical order.
For example,

/**
 * @ORM\DiscriminatorMap({
 *     "a" = "AEntityInterface",
 *     "b" = "BEntityInterface"
 * })
 */

is working but,

/**
 * @ORM\DiscriminatorMap({
 *     "b" = "BEntityInterface",
 *     "a" = "AEntityInterface"
 * })
 */

lead to:

[Doctrine\Common\Persistence\Mapping\MappingException]
Class 'BEntityInterface' does not exist






[DDC-3723] [GH-1399] Fix for DDC-3719. Created: 03/May/15  Updated: 16/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None

Issue Links:
Reference
relates to DDC-3719 Criteria won't work on non-owning sid... Open

 Description   

This issue is created automatically through a Github pull request on behalf of boskee:

Url: https://github.com/doctrine/doctrine2/pull/1399

Message:

Switch to relationToTargetKeyColumns when matching non-owning side with Criteria. Fixes DDC-3719.



 Comments   
Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1399] was labeled:
https://github.com/doctrine/doctrine2/pull/1399





[DDC-3722] XmlExporter driver ignore entityListeners Created: 03/May/15  Updated: 03/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4, 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Fedir Zinchuk Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: entityListeners, export, orm


 Description   

<entity-listeners> missed in XML export result, when export the entity mapping with entityListeners

And after quick look in the code, seems other drivers also ignore it






[DDC-3721] [GH-1398] When using a custom data type, SchemaTool does not pass column length field mapping to relation join columns Created: 29/Apr/15  Updated: 30/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Tools
Affects Version/s: 2.4, 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 1
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of bgetsug:

Url: https://github.com/doctrine/doctrine2/pull/1398

Message:

We have a custom data type for storing UUIDs in a BINARY column in MySQL:

class UuidType extends Type
{
    const UUID = 'uuid';


    /**
     * @inheritdoc
     */
    public function getSqlDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return $platform->getBinaryTypeDeclarationSQL($fieldDeclaration);
    }


    /**
     * @inheritdoc
     */
    public function getName()
    {
        return self::UUID;
    }


    /**
     * @inheritdoc
     */
    public function convertToPhpValue($value, AbstractPlatform $platform)
    {
        if ($value !== null) {
            return strtoupper(bin2hex($value));
        }
    }


    /**
     * @inheritdoc
     */
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        if ($value !== null) {
            // If the app put any dashes in, we strip them, just in case
            return hex2bin(str_replace('-', '',$value));
        }
    }

    
    /**
     * @inheritdoc
     */
    public function requiresSQLCommentHint(AbstractPlatform $platform)
    {
        return true;
    }
    

    /**
     * Generate a UUID that is optimized for MySQL's InnoDB engine
     * Based on UUID1, but transposed for more optimal inserts and sized for binary(16) column
     *
     * @return string MySQL-optimized UUID that works well with UUID column type
     */
    public static function generateUuid()
    {
        $uuid = Uuid::uuid1()->toString();

        $uuidFormattedForMySQL = self::transposeUuid($uuid);

        return $uuidFormattedForMySQL;
    }


    /**
     * Optimize format of UUID for storing as binary in MySQL
     *
     * @param $uuid
     *
     * @return string
     *
     * @see http://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/
     */
    public static function transposeUuid($uuid)
    {
        /*
         * orig UUID1: 13341cb5-c1f8-11e4-91e7-080027880ca6
         * transpose:  11e4-c1f8-13341cb5-91e7-080027880ca6
         * format:     11E4C1F813341CB591E7080027880CA6  <-- this is what can be ideally stored as binary in MySQL
         */
        $uuidOptimizedOrderForMySQL = substr($uuid, 14, 4) . substr($uuid, 9, 4) . substr($uuid, 0, 8) . substr(
                $uuid,
                19,
                17
            );
        $uuidFormattedForMySQL = strtoupper(str_replace('-', '', $uuidOptimizedOrderForMySQL));

        return $uuidFormattedForMySQL;
    }

...and the following related (example) entities:

/**
 * @Entity
 */
class Thing 
{
    /**
     * @Id
     * @var string UUID
     * @Column(type="uuid", length=16)
     * @GeneratedValue(strategy="CUSTOM")
     * @CustomIdGenerator(class="Fisdap\Doctrine\Extensions\IdGenerator\UuidGenerator")
     */
    protected $id;

   /**
     * @OneToOne(targetEntity="OtherThing", mappedBy="thing")
     */
    protected $otherThing;
}

/**
 * @Entity
 */
class OtherThing 
{
        /**
	 * @Id
	 * @Column(type="integer")
	 * @GeneratedValue
	 */
	protected $id;

       /**
	 * @OneToOne(targetEntity="Thing", inversedBy="otherThing")
	 */
	protected $thing;
}

In our case, since SchemaTool::gatherRelationJoinColumns() doesn't copy $fieldMapping['length'] to $columnOptions['length'] for non-string / custom data types, the resulting CREATE TABLE SQL for the OtherThing entity will have a column definition for its association with Thing as thing_id BINARY(0). Of course, MySQL/InnoDB will be unable to create the index for a column with zero length, and multiple exceptions are thrown.

I believe the fix here is to simply check whether $fieldMapping['length'] is set, regardless of the value of $fieldMapping['type']. For good measure, I did the same for $fieldMapping['scale'] and $fieldMapping['precision'].






[DDC-3720] Doctrine - Invalid column name 'sclr0' Created: 29/Apr/15  Updated: 25/Jun/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: DQL
Affects Version/s: None
Fix Version/s: 2.5.1
Security Level: All

Type: Task Priority: Major
Reporter: Belita Colares Assignee: Guilherme Blanco
Resolution: Unresolved Votes: 0
Labels: querybuilder


 Description   

My query doesn't work when i use ->setMaxResult with orderBy SUM.

My dataBase is MSSQL SERVER 2008 R2

$query = $entity->createQueryBuilder('t')
                        ->select('SUM(t.price) AS test')
                        ->setMaxResults(10)
 ->orderBy('test', 'ASC')->getQuery()->getResult();

when i use only
'->select('t.price AS test') ->setMaxResults(10) ->orderBy('test', 'ASC');' doesn't work too

Invalid column name 'sclr0'.
but when i comment this method setMaxResult() my query works fine.

Please help-me, I sorry my english.






[DDC-3719] Criteria won't work on non-owning side of many to many collection Created: 29/Apr/15  Updated: 03/May/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Lazy Loading, ORM
Affects Version/s: Git Master
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Logan Bailey Assignee: Guilherme Blanco
Resolution: Unresolved Votes: 1
Labels: many-to-many, orm

Issue Links:
Reference
is referenced by DDC-3723 [GH-1399] Fix for DDC-3719. Open

 Description   

I received the following error when trying to call matching on a ManyToMany relationship from the non-owning side.

ErrorException in ManyToManyPersister.php line 234: Undefined index: relationToSourceKeyColumns

ManyToManyPersister::loadCriteria relies on the relationToSourceKeyColumns data from the mapping data. This value is set in ClassMetadataInfo::_validateAndCompleteManyToManyMapping, but it's only set on the owning side of the relationship.






[DDC-3718] Inifinite schema diff when using decimal with options unsigned Created: 29/Apr/15  Updated: 29/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Khang Minh Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: mysql, orm, schematool
Environment:

Php 5.6.7 (cli)
MariaDB 10.0.17
Symfony 2.6.1



 Description   

When using a mapping similar to:

        field_name:
            type: decimal
            scale: 2
            options:
                unsigned: true

I keep getting this when issuing app/console doctrine:schema:update --dump-sql (symfony console):

ALTER TABLE table_name CHANGE field_name field_name NUMERIC(10, 2) NOT NULL;

could be related to: http://www.doctrine-project.org/jira/browse/DC-752






[DDC-3717] [GH-1397] Add Expr::concat support for multiple arguments Created: 28/Apr/15  Updated: 28/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of giosh94mhz:

Url: https://github.com/doctrine/doctrine2/pull/1397

Message:

DQL CONCAT function support variable number of arguments (2+) since version `2.4.0`.

The `Expr` class, on the other hand, is still limited to 2 arguments, and require multiple call to achive a similar result (see [this SO question](http://stackoverflow.com/questions/22169324/concat-three-or-more-fields-in-doctrine/29913780)). I've improved `Expr` implementation to support variable number of arguments in a backward compatible way.

Please, consider backporting to `2.4` branch if you plan to release other versions, since `2.5` introduce many features and may not be possible to easily upgrade. I may be wrong, though.






[DDC-3716] [GH-1396] [Documentation] Initializing embeddables doc Created: 27/Apr/15  Updated: 27/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of Padam87:

Url: https://github.com/doctrine/doctrine2/pull/1396

Message:






[DDC-3715] [GH-1395] Fix for DDC-3697 Created: 26/Apr/15  Updated: 15/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of mpdude:

Url: https://github.com/doctrine/doctrine2/pull/1395

Message:

Also fix Lexer::match() so it does not accept T_WHERE when T_WITH is supposed to be matched. (DDC-3701)



 Comments   
Comment by Doctrine Bot [ 15/Jul/15 ]

A related Github Pull-Request [GH-1389] was labeled:
https://github.com/doctrine/doctrine2/pull/1389





[DDC-3714] [GH-1394] Fix result cache setting query caching Created: 24/Apr/15  Updated: 15/Jul/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of mente:

Url: https://github.com/doctrine/doctrine2/pull/1394

Message:

Hello!

This PR fixes the issue with result caching option when query caching is on.

Reproduce is pretty easy. Call same query twice: first time with `Query::useResultCache(true)`, second time with `Query::useResultCache(false)`. If query cache is on - `useResultCache()` setting will be cached along with query itself.

Use case is when you want to keep query cache always on but want sometimes to bypass result cache (e.g. you're sure that underlying data was updated).

P.S. Is it possible to backport fix to 2.4? I can provide another PR for it

Alex



 Comments   
Comment by Doctrine Bot [ 15/Jul/15 ]

A related Github Pull-Request [GH-1394] was labeled:
https://github.com/doctrine/doctrine2/pull/1394





[DDC-3713] [GH-1393] Composite key id used in nullable relations Created: 24/Apr/15  Updated: 16/Jul/15  Resolved: 16/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Invalid Votes: 0
Labels: association, composite-identifier, derived-identifier, hydration, hydrator, identifier, identifier-association


 Description   

This issue is created automatically through a Github pull request on behalf of Firemango:

Url: https://github.com/doctrine/doctrine2/pull/1393

Message:

This provides a fix, when you're using a composite primary key, and using part of the composite key as a join column, that will make sure you don't overwrite the composite id key.

Also the fix to Unit of Work needed to consider if part of a composite key was null, it should not try to map the entity.



 Comments   
Comment by Doctrine Bot [ 15/Jul/15 ]

A related Github Pull-Request [GH-1393] was labeled:
https://github.com/doctrine/doctrine2/pull/1393

Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1393] was assigned:
https://github.com/doctrine/doctrine2/pull/1393

Comment by Doctrine Bot [ 16/Jul/15 ]

A related Github Pull-Request [GH-1393] was closed:
https://github.com/doctrine/doctrine2/pull/1393

Comment by Marco Pivetta [ 16/Jul/15 ]

Mappings provided with the PR are invalid (field shared across identifier, field mappings and association mappings)





[DDC-3712] [GH-1392] transactional() wrapper corrupts return values Created: 23/Apr/15  Updated: 15/Jul/15  Resolved: 15/Jul/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.4, 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Doctrine Bot Assignee: Marco Pivetta
Resolution: Can't Fix Votes: 1
Labels: entitymanager, transactional


 Description   

This issue is created automatically through a Github pull request on behalf of DHager:

Url: https://github.com/doctrine/doctrine2/pull/1392

Message:

The EntityManager::transactional() method has undocumented behavior, which unexpectedly rewrites all `false`-ish return values into `true` before passing them on:

    $result = $this->_em->transactional(function (){
        return array();
    }
    assert(is_array($result)); // Fails

I think there's a very strong case to be made that this is undesirable, *however* it's been in existence for a few years now (since DDC-1125) and it's very likely at least a few users have code that relies on the undocumented behavior.

This PR represents the most direct fix, but as a practical matter we may want to improve the documentation instead. If that is the decision, I'd be happy to create a separate PR for documentation changes.



 Comments   
Comment by Marco Pivetta [ 15/Jul/15 ]

This issue cannot be fixed in 2.x, and requires a change/rewrite for 3.0 instead.





[DDC-3711] Error on manyToMany with composite primary key Created: 23/Apr/15  Updated: 23/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers
Affects Version/s: 2.5
Fix Version/s: 2.4.7
Security Level: All

Type: Bug Priority: Major
Reporter: Marc Pantel Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: None
Environment:

symfony 2.6



 Description   

Hi,
I hope that I report in the right place.
I have an issue when I try to create an manyToMany association with an entity with a composite primary key.
The problem is that only one of the two key are create on the association table.

I also have manyToOne association that works fine.

Here are the mapping

Commune.orm.yml

AppDemo\ZoneBundle\Entity\Commune:
    type: entity
    table: ref_commune
    id:
        codeInsee:
            type: string
            nullable: false
            length: 5
            fixed: true
            column: commune_code_insee
        codePostal:
            type: string
            nullable: false
            length: 5
            fixed: true
            column: commune_code_postal
    fields:
        nom:
            type: string
            nullable: false
            length: 100
            fixed: false
            column: commune_nom
    manyToMany:
        zones:
            targetEntity: Zone
            joinTable:
                name: lnk_zone_commune
                joinColumns:
                    commune_code_insee:
                        referencedColumnName: commune_code_insee
                    commune_code_postal:
                        referencedColumnName: commune_code_postal
                inverseJoinColumns:
                    zone_id:
                        referencedColumnName: zone_idx

Zone.orm.yml

AppDemo\ZoneBundle\Entity\Zone:
    type: entity
    repositoryClass: AppDemo\ZoneBundle\Repository\ZoneRepository
    table: ref_zone
    id:
        idx:
            type: integer
            nullable: false
            unsigned: false
            comment: ''
            id: true
            column: zone_idx
            generator:
                strategy: IDENTITY
    fields:
        libelle:
            type: string
            nullable: false
            length: 30
            options:
                default: ''
                comment: 'Libelle de la Zone'


 Comments   
Comment by Marco Pivetta [ 23/Apr/15 ]

What if you simply leave out the joinColumns mappings? Check what comes out of the metadata there, then compare it to your metadata (dump it)

Comment by Marc Pantel [ 23/Apr/15 ]

When I remove the JoinsColumns mapping, I get an error:

Column name `id` referenced for relation from AppBundle\Entity\Commune towards AppBundle\Entity\Zone does not exist.

How do I dump the metadata?





[DDC-3710] Relations inside of embedded objects do not work Created: 23/Apr/15  Updated: 23/Apr/15  Resolved: 23/Apr/15

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Kore Nordmann Assignee: Marco Pivetta
Resolution: Won't Fix Votes: 0
Labels: embeddables, orm

Attachments: File ValueObjectsWithRelationTest.php    

 Description   

If an embeddable has a relation to another object this is neither stored nor fetched.

Find attached a test case showing and reproducing the problem with a Many-To-One relation inside an embeddable.



 Comments   
Comment by Marco Pivetta [ 23/Apr/15 ]

A value object can't have an object reference to an entity by design, as checking its value would then be impossible from the outside (because a VO can't reference a non-VO)





[DDC-3709] [GH-1391] [DDC-3693] Issue with notify change tracking policy Created: 22/Apr/15  Updated: 22/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Doctrine Bot Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: None


 Description   

This issue is created automatically through a Github pull request on behalf of napsi:

Url: https://github.com/doctrine/doctrine2/pull/1391

Message:






[DDC-3708] Doctrine SQL filters and lazy loading causing EntityNotFoundException Created: 22/Apr/15  Updated: 22/Apr/15

Status: Reopened
Project: Doctrine 2 - ORM
Component/s: Lazy Loading, ORM
Affects Version/s: 2.4
Fix Version/s: None
Security Level: All

Type: Documentation Priority: Minor
Reporter: Pavle Predic Assignee: Marco Pivetta
Resolution: Unresolved Votes: 0
Labels: None


 Description   

When using a global SQL filter, lazy loading ManyToOne relations may lead to an EntityNotFoundException. You will always get a proxy object for the relation, but as soon as you try to access any property, doctrine will attempt to load the entity from DB, get zero results because the global filter has been applied (assuming that the filter affects the entity in question) and throw an EntityNotFoundException.

What is the recommended way of dealing with this issue globally? The use case is a CMS with a soft-delete feature. A global sql filter filters out entities with a deleted flag. One solution would be to write a custom ProxyFactory that doesn't throw the EntityNotFoundException or to write a custom ProxyGenerator that puts the initializer call in a try/catch block and returns null if an EntityNotFoundException is thrown.

This issue can be resolved by using "fetch EAGER" on ManyToOne relations, but this can lead to performance issues due to the large number of DB queries. How can this problem be solved while still using the lazy loading mechanism?



 Comments   
Comment by Marco Pivetta [ 22/Apr/15 ]

This sort of issue simply occurs when enabling SQL filters after any loading has already happened.

We can't fix this, you are supposed to call Doctrine\ORM\EntityManagerInterface#clear() right after enabling or disabling any filter.

Comment by Pavle Predic [ 22/Apr/15 ]

Filter is enabled from the start. I'm not sure if I managed to explain the issue properly, so let's use an example. Say we have the following entities:

Person (id, name, image_id, deleted)
Image (id, file_name, deleted)

Image is defined as a ManyToOne relation in Person.

Now let's say we have a global SQL filter that filters out all entities where deleted = 1.
Say we have the following data:
Person table:

1, "Jimi", 1, 0

Image table:

1, "jimi.jpg", 1

Now I load the person:

$person = $personRepository->find(1);

If I now access the related Image entity, I will get the instance of Proxy class:

$image = $person->getImage(); //no errors here, doctrine assumes that the relation exists, but doesn't attempt to load it from DB

When I try to get a specific Image attribute, I get an EntityNotFoundException:

$imagePath = $image->getFileName(); //throws an EntityNotFoundException

Obviously, I could use a try/catch block here, but I need a global solution. Most of the time, I'm accessing such relations in a twig template, which is not the best place to deal with exceptions.

Comment by Marco Pivetta [ 22/Apr/15 ]

Reopened: I obviously misunderstood the problem.

I don't think there is a doctrine-side solution to it.

Comment by Pavle Predic [ 22/Apr/15 ]

So definitely not possible to extend ProxyFactory or ProxyGenerator?

Or can this be made into a feature request where a specific config option would force the Proxy to return null instead of throwing an EntityNotFoundException?

Comment by Marco Pivetta [ 22/Apr/15 ]

Since it is an SQL-level filter, it would have to act at SQL level.

One possible solution is to always do joins on filtered associations, and then fetch either NULL or the identifier for those associations.





[DDC-3707] Getting Started contains a broken link Created: 21/Apr/15  Updated: 21/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: Documentation
Affects Version/s: 2.x
Fix Version/s: None

Type: Documentation Priority: Minor
Reporter: Chris Smith Assignee: Benjamin Eberlei
Resolution: Unresolved Votes: 0
Labels: 404, documentation


 Description   

The reference to Zend DB is broken in the getting started documentation.



 Comments   
Comment by Chris Smith [ 21/Apr/15 ]

I think it should point to here: http://framework.zend.com/manual/1.12/en/zend.db.table.html





[DDC-3706] DQL parsing fail when using COUNT with "Simple Derived Identity" primary key Created: 21/Apr/15  Updated: 21/Apr/15

Status: Open
Project: Doctrine 2 - ORM
Component/s: DQL, ORM
Affects Version/s: Git Master, 2.5
Fix Version/s: None
Security Level: All

Type: Bug Priority: Major
Reporter: Dmitry Korotovsky