4

我目前正在使用 Symfony2 进行一个小项目。

我正在尝试从表中获取某一天(默认为今天)的所有条目。

我首先DAY()在我的学说查询构建器中尝试过,但这不起作用,所以我现在在我的实体存储库中使用本机 sql 查询:

$em = $this->getEntityManager();

$rsm = new ResultSetMappingBuilder($em);
$rsm->addRootEntityFromClassMetadata('Teacup\CompareBundle\Entity\Log', 'l');
$rsm->addJoinedEntityFromClassMetadata('Teacup\CompareBundle\Entity\Frame', 
                                       'f', 
                                       'l', 
                                       'frame', 
                                       array('id' => 'frame_id'));

$query = $em->createNativeQuery('SELECT l.id, l.severity, 
                                        l.details, l.created_at, f.url 
                                 FROM log l 
                                 INNER JOIN frame f ON l.frame_id = f.id 
                                 WHERE DAY(l.created_at) = :day', $rsm);

但我得到这个错误:

The column 'created_at' conflicts with another column in the mapper. 

我不知道如何解决它。我很确定这没什么,但我只是继续尝试没有任何成功。有人能帮我吗?

4

2 回答 2

4

为 Doctrine 指定重命名模式以自动解决冲突:

$rsm = new ResultSetMappingBuilder($em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT);

接下来像往常一样配置 RSM,然后为您的查询生成一个选择子句:

$selectClause = $rsm->generateSelectClause()

$query = $em->createNativeQuery('SELECT ' . $selectClause. '
                             FROM log l 
                             INNER JOIN frame f ON l.frame_id = f.id 
                             WHERE DAY(l.created_at) = :day', $rsm);
于 2016-07-26T23:51:19.050 回答
1

为什么不使用 DBAL 层?

$day = date('d');

$dbal = $this->getDoctrine()->getConnection('default');
$stmt = 'SELECT l.id, l.severity, l.details, l.created_at, f.url FROM log l 
         INNER JOIN frame f ON l.frame_id = f.id 
         WHERE DAY(l.created_at) = :day';

$data = $dbal->fetchAssoc( $stmt , array( 'day' => $day ) );
于 2014-05-30T12:06:09.730 回答