按特定日期/任何年份查找所有行

时间:2014-08-14 23:21:55

标签: php mysql symfony doctrine-orm

我正在使用Symfony2构建一个应用程序,我需要为一个存储库创建一个自定义函数,该存储库可以选择某个用户制作的所有行,这些行在某个月/日但是在任何一年内。

所以我希望将某一天和用户传递到回购中,并获取当天所做的任何条目,从任何一年开始。

无论如何通过查询构建器执行此操作,还是需要将它们全部拉出来并使用数组中的PHP对它们进行排序?

2 个答案:

答案 0 :(得分:1)

这个怎么样:

public function fetchByDay($day)
{    
    $connection = $this->getEntityManager()->getConnection()->prepare('
        SELECT *
        FROM my_table
        WHERE DAYOFMONTH(date_column) = :day
    ');
    $connection->bindValue('day', (int) $day, \PDO::PARAM_INT);
    $connection->execute();

    return $connection->fetchAll(\PDO::FETCH_ASSOC);
}

这里有documentation page以获取更多信息。

答案 1 :(得分:0)

这将需要几个步骤:

  • 通过添加到composer.json添加beberlei\Doctrine extensions"beberlei/DoctrineExtensions": "*"

  • 修改...app/config/config.yml以包含

doctrine:
...
    orm:
...
        dql:
            datetime_functions: 
                Day: DoctrineExtensions\Query\Mysql\Day
                Month: DoctrineExtensions\Query\Mysql\Month

然后,假设行出现在与User具有ManyToOne关系的实体中,您可以在存储库中构建查询,例如:

public function getSomeStuff($user, $day, $month)
{
    return $this->getEntityManager()
                ->createQuery(
                        "SELECT r FROM YourBundle:RowSource r "
                        . "JOIN YourBundle:User u "
                        . "WITH r.user = u "
                        . "WHERE Month(r.rowDate) = $month AND "
                        . "Day(r.rowDate) = $day AND "
                        . "r.user = $user "
            )->getResult();
}