fix orm sub query entity type

This commit is contained in:
Yuri Kuznetsov
2021-04-06 12:07:02 +03:00
parent d0c61ea5fa
commit 62d2157fd8
2 changed files with 42 additions and 9 deletions
@@ -2476,27 +2476,25 @@ abstract class BaseQueryComposer implements QueryComposer
return '0';
}
if (!empty($value['entityType'])) {
$subQueryEntityType = $value['entityType'];
} else {
$subQueryEntityType = $entity->getEntityType();
}
$subQuerySelectParams = [];
if (!empty($value['selectParams'])) {
$subQuerySelectParams = $value['selectParams'];
} else {
}
else {
$subQuerySelectParams = $value;
}
$subQueryEntityType = $subQuerySelectParams['from'] ?? $subQueryEntityType;
if (!isset($subQuerySelectParams['from']) && !isset($subQuerySelectParams['fromQuery'])) {
// 'entityType' is for backward compatibility.
$subQuerySelectParams['from'] = $value['entityType'] ?? $entity->getEntityType();
}
if (!empty($value['withDeleted'])) {
$subQuerySelectParams['withDeleted'] = true;
}
$subSql = $this->createSelectQuery($subQueryEntityType, $subQuerySelectParams);
$subSql = $this->createSelectQueryInternal($subQuerySelectParams);
return $leftPart . " {$operator} ({$subSql})";
}
@@ -1885,6 +1885,41 @@ class MysqlQueryComposerTest extends \PHPUnit\Framework\TestCase
$this->assertEquals($expectedSql, $sql);
}
public function testSelectSubQuery3()
{
$queryBuilder = new QueryBuilder();
$subQuery2 = $queryBuilder
->select()
->select('\'test\'', 'test')
->build();
$subQuery1 = $queryBuilder
->select()
->fromQuery($subQuery2, 't')
->select('t.test', 'value')
->build();
$query = $queryBuilder
->select()
->from('Test')
->select('id')
->where([
'id=s' => $subQuery1->getRaw(),
])
->build();
$sql = $this->query->compose($query);
$expectedSql =
"SELECT test.id AS `id` FROM `test` " .
"WHERE test.id IN " .
"(SELECT t.test AS `value` FROM (SELECT 'test' AS `test`) AS `t`) AND " .
"test.deleted = 0";
$this->assertEquals($expectedSql, $sql);
}
public function testSelectNoFrom1()
{
$queryBuilder = new QueryBuilder();