我是 doctrine 的新手 . 我需要得到几个表的数组结果,我无法得到正确的结果 .
表1:建筑物
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| logo | varchar(255) | YES | | NULL | |
| image | varchar(255) | YES | | NULL | |
| slug | varchar(255) | YES | | NULL | |
| star | int(11) | YES | | NULL | |
| map | longtext | YES | | NULL | |
| is_active | tinyint(1) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
表2:BuildingTranslation
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| building_id | int(11) | YES | MUL | NULL | |
| language | varchar(5) | YES | | NULL | |
| name | varchar(255) | NO | | NULL | |
| label | varchar(255) | YES | | NULL | |
| content | longtext | YES | | NULL | |
| address | longtext | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
表3:配置
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| building_id | int(11) | YES | MUL | NULL | |
| type | varchar(255) | YES | | NULL | |
| language | varchar(5) | YES | | NULL | |
| name | varchar(255) | NO | | NULL | |
| parameter | varchar(255) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
表格更多:类别,内容,联系方式,标签等...
这是我试过的查询结果 .
array:1 [▼
0 => array:9 [▼
"id" => 1
"logo" => "logo.png"
"image" => "background.png"
"slug" => "hotel"
"star" => 3
"map" => "NULL"
"isActive" => true
"translations" => array:1 [▼
0 => array:7 [▼
"id" => 2
"buildingId" => 1
"language" => "en"
"name" => "Building name"
"label" => "Since 2001"
"content" => "Content text"
"address" => "Building address"
]
]
"configs" => array:1 [▼
0 => array:5 [▼
"id" => 1
"type" => "social"
"language" => "en"
"name" => "facebook"
"parameter" => "https://www.facebook.com/"
]
]
]
]
我需要的是Building和BuildingTranslation实体合并为一行,其他实体是分开的 . 当我尝试选择这样的列:
$qb = $em->createQueryBuilder()
->select('b.slug, b.star', 't.name', 'configs')
->from('HotelBundle:Building', 'b')
->join('b.translations', 't', 'WITH', 'b.id = t.building AND t.language = :language')
->leftJoin('b.configs', 'configs')
->where('b.slug = :building')
->groupBy('t.name')
->setParameter('building', $building)
->setParameter('language', $locale)
->getQuery()
->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
我收到这个错误 . 错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体 . “) .