0

以下のコードを使用して、Doctrineを使用していくつかのデータをネイティブにクエリしています。

    $sql = "SELECT count(type) AS notifications, 
                count(DISTINCT subject) AS users, 
                count(DISTINCT object_activity) AS activities,
                count(DISTINCT object_activity_relationship) AS relationships,  
                type,
                min(created) as oldest, 
                max(created) as latest "
        ."FROM notification n "
        ."WHERE target_user='".$user->id."' AND notification_read=0 "
        ."GROUP BY type "
        ."ORDER BY latest ";


    $rsm = new \Doctrine\ORM\Query\ResultSetMapping;
    $rsm->addScalarResult('type', 'type');
    $rsm->addScalarResult('oldest', 'oldest');
    $rsm->addScalarResult('latest', 'latest');
    $rsm->addScalarResult('users', 'users');
    $rsm->addScalarResult('notifications', 'notifications');
    $rsm->addScalarResult('activities', 'activities');
    $rsm->addScalarResult('relationships', 'relationships');
    $query = $this->_em->createNativeQuery($sql, $rsm);
    return $query->getResult();

作成されたフィールドはデータベースのDateTimeフィールドであり、現在、次のような日付が表示されます。

2012-08-22 14:45:37

フォーマットを変更したいのですが、resultsetmappingを使用してフォーマットする方法を教義に伝える方法はありますか?私はphpでそれができることを知っていますが、最初にこの方法でそれができるかどうかを見たいと思います。

4

1 に答える 1

2

MySQL を使用していると仮定すると、次のようにクエリでDATE_FORMAT()を使用できます。

DATE_FORMAT(MIN(created), '%d-%m-%Y')) AS oldest

user_id に $query->setParameter() を使用することもお勧めします

$sql = "SELECT
            COUNT(type) AS notifications, 
            COUNT(DISTINCT subject) AS users, 
            COUNT(DISTINCT object_activity) AS activities,
            COUNT(DISTINCT object_activity_relationship) AS relationships,  
            type,
            DATE_FORMAT(MIN(created), '%d-%m-%Y') AS oldest, 
            DATE_FORMAT(MAX(created), '%d-%m-%Y') AS latest
        FROM
            notification n
        WHERE
            target_user = ':user_id'
        AND
            notification_read = 0
        GROUP BY
            type
        ORDER BY
            latest";


$rsm = new \Doctrine\ORM\Query\ResultSetMapping;
$rsm->addScalarResult('type', 'type');
$rsm->addScalarResult('oldest', 'oldest');
$rsm->addScalarResult('latest', 'latest');
$rsm->addScalarResult('users', 'users');
$rsm->addScalarResult('notifications', 'notifications');
$rsm->addScalarResult('activities', 'activities');
$rsm->addScalarResult('relationships', 'relationships');
$query = $this->_em->createNativeQuery($sql, $rsm);
$query->setParameter('user_id', $user->id);
return $query->getResult();

SQLでフォーマットを固定したくない場合は、パラメータにすることもできます

于 2012-09-11T10:55:13.990 に答える