-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Closed
Description
Bug Report
| Q | A |
|---|---|
| BC Break | yes |
| Version | 2.7.1 |
Summary
2.7.1 seems to (partially) break support for embedded properties, resulting in a "column not found" exception. Reverting to 2.7.0 without any other code changes fixes this. The cause seems to be the use of an undefined alias for fetching the embeddable's properties.
Current behavior
The a1_ alias is introduced without being defined, generating the following SQL:
SELECT o0_.invoice_id AS invoice_id_0, o0_.invoice_status AS invoice_status_1, a1_.code_number AS code_number_11, a1_.code_year AS code_year_12
FROM orders_invoice o0_
WHERE o0_.code_year = ?
ORDER BY o0_.code_number DESC LIMIT 1'This results in the following exception:
An exception occurred while executing 'SELECT o0_.invoice_id AS invoice_id_0, o0_.invoice_status AS invoice_status_1, a1_.code_number AS code_number_11, a1_.code_year AS code_year_12 FROM orders_invoice o0_ WHERE o0_.code_year = ? ORDER BY o0_.code_number DESC LIMIT 1' with params [2020]:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'a1_.code_number' in 'field list'
How to reproduce
Upgrade to 2.7.1 and use the following entity and embeddable. The entity and embeddable are trimmed for readability but you get the gist:
Entity
class Invoice
{
/**
* @ORM\Embedded(class="FQCN\Foo\Bar\InvoiceCode")
*
* @var InvoiceCode
*/
private $code;
}Embedded
/**
* @ORM\Embeddable
*/
class InvoiceCode extends AbstractYearSequenceValue
{
}
/**
* @ORM\Embeddable
*/
abstract class AbstractYearSequenceValue
{
/**
* @ORM\Column(type="integer", name="number", length=6)
*
* @var int
*/
protected $number;
/**
* @ORM\Column(type="smallint", name="year", length=4)
*
* @var int
*/
protected $year;
}Expected behavior
The existing o0_ alias is re-used, resulting in the following SQL:
SELECT o0_.invoice_id AS invoice_id_0, o0_.invoice_status AS invoice_status_1, o0_.code_number AS code_number_11, o0_.code_year AS code_year_12
FROM orders_invoice o0_
WHERE o0_.code_year = ?
ORDER BY o0_.code_number DESC LIMIT 1'emmanuelballery