我正在使用Symfony2构建一个应用程序,我需要为一个存储库创建一个自定义函数,该存储库可以选择某个用户制作的所有行,这些行在某个月/日但是在任何一年内。
所以我希望将某一天和用户传递到回购中,并获取当天所做的任何条目,从任何一年开始。
无论如何通过查询构建器执行此操作,还是需要将它们全部拉出来并使用数组中的PHP对它们进行排序?
答案 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();
}