Details
-
Type:
Bug
-
Status:
Reopened
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 2.3
-
Fix Version/s: None
-
Component/s: ORM
-
Security Level: All
-
Labels:None
Description
The condition on the discriminator column is placed in the WHERE clause when using arbitrary join syntax, which renders LEFT JOINs useless.
Given these classes:
A - no inheritance
B1 - abstract, root of a hierarchy, discriminator column is named 'type'
I setup a query builder like this:
$qb->select('a.id AS idA, b.id AS idB')
->from('\Entity\A', 'a')
->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something');
And the SQL Doctrine generates is something like this:
SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3')
The problems is that the WHERE condition makes the left join useless.
The condition on the discriminator column should be placed in the JOIN clause to avoid the problem.
Issue Links
- duplicates
-
DDC-1940
Doctrine DQL: erroneous sql generation from dql join with "WITH" or "WHERE" clause
-
Activity
Benjamin Eberlei
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Description |
The condition on the discriminator column is placed in the WHERE clause when using arbitrary join syntax, which renders LEFT JOINs useless.
Given these classes: A - no inheritance B1 - abstract, root of a hierarchy, discriminator column is named 'type' I setup a query builder like this: $qb->select('a.id AS idA, b.id AS idB') ->from('\Entity\A', 'a') ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something'); And the SQL Doctrine generates is something like this: SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3') The problems is that the WHERE condition makes the left join useless. The condition on the discriminator column should be placed in the JOIN clause to avoid the problem. |
The condition on the discriminator column is placed in the WHERE clause when using arbitrary join syntax, which renders LEFT JOINs useless.
Given these classes: A - no inheritance B1 - abstract, root of a hierarchy, discriminator column is named 'type' I setup a query builder like this: {code} $qb->select('a.id AS idA, b.id AS idB') ->from('\Entity\A', 'a') ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something'); And the SQL Doctrine generates is something like this: SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3') {code} The problems is that the WHERE condition makes the left join useless. The condition on the discriminator column should be placed in the JOIN clause to avoid the problem. |
Benjamin Eberlei
made changes -
| Assignee | Benjamin Eberlei [ beberlei ] | Alexander [ asm89 ] |
Benjamin Eberlei
made changes -
Benjamin Eberlei
made changes -
| Status | Open [ 1 ] | Resolved [ 5 ] |
| Resolution | Duplicate [ 3 ] |
Jordi Forns
made changes -
| Comment |
[ Tom's fix consists in leaving the condition on the discriminator column in the WHERE clause, but allowing NULL values, which Doctrine seems to handle correctly when retrieving the result either as an array (by leaving fields null) or entities (which will be set to null). Alexander: could you please give it a look? ] |
Jordi Forns
made changes -
| Resolution | Duplicate [ 3 ] | |
| Status | Resolved [ 5 ] | Reopened [ 4 ] |
This list may be incomplete, as errors occurred whilst retrieving source from linked applications:
- Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DDC-2235, expand=changesets[-21:-1].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)
Can this be somehow worked around? If not, it is really serious problem...