getResult返回SQL查询Symfony2以外的另一个结果
只需要加入一个成员第一次上传到他的画廊图像,但有一个大问题,因为我是新的symfony 表:getResult返回SQL查询Symfony2以外的另一个结果,symfony,doctrine,Symfony,Doctrine,只需要加入一个成员第一次上传到他的画廊图像,但有一个大问题,因为我是新的symfony 表: CREATE TABLE `member` ( `member_id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(256) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`member_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf
CREATE TABLE `member` (
`member_id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`member_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `image` (
`image_id` int(10) NOT NULL AUTO_INCREMENT,
`member_id` int(10) NOT NULL,
`path` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`image_id`),
KEY `image_member_id_idx` (`member_id`),
CONSTRAINT `image_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`member_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
行动:
$items = $this->getDoctrine()
->getManager()
->getRepository('AcmeMyBundle:Member')
->createQueryBuilder('m')
->select('m','i')
->leftJoin('Acme\MyBundle\Entity\Image', 'i', 'WITH','i.memberId = m.memberId')
->addGroupBy('m.memberId')
->setMaxResults(10)
->getQuery()
->getArrayResult();
它返回的数据比数据库中的记录多2倍,而不是限制和分组设置
当我只打印->getQuery->getSQL()
时,它返回
SELECT m0_.member_id AS member_id0,
m0_.name AS name1,
i1_.image_id AS image_id2,
i1_.path AS path3,
i1_.member_id AS member_id4
FROM member m0_
LEFT JOIN image i1_
ON (i1_.member_id = m0_.member_id)
GROUP BY m0_.member_id LIMIT 10
这个查询直接从数据库执行时返回正确答案。
我在可能出错的地方需要帮助?如果您已正确映射了OneToMany关系,则不应使用以下列显式连接:
->leftJoin('Acme\MyBundle\Entity\Image', 'i', 'WITH','i.memberId = m.memberId')
而是:
->leftJoin('Acme\MyBundle\Entity\Image', 'i')
你能给我们看看你的实体吗
另外,您考虑过使用
->getResult()
(对象水合作用)吗?我也遇到了类似的问题
在我的例子中,有重复的id(在db中是一个视图),所以当填充对象时,只为每个重复的行创建一个对象
我为目标实体('entityAlias')添加了一个distinct,以便在这两种情况下获得相同的响应
$queryBuilder=$this->createQueryBuilder('entityAlias');
$queryBuilder->leftJoin(…)
->独特(“实体别名”);
这为我解决了问题