Symfony2 Twig显示上个月的记录

时间:2016-03-28 08:49:14

标签: php symfony

在我的previous问题之后,我遇到了一个新问题。我有2个实体 - 作者和书籍,1个作者可能有很多书,但1本书只有1个作者。现在这本书也有创作日期。我可以展示每位作者有多少本书,

Author    Books 
Author1     5
Author2     7 etc...

但是在同一张桌子中我需要分别显示上个月添加了多少作者的书籍,如下所示:

Author    Books   Added in last month
Author1     5            2
Author2     7            3 etc..

在我的数据库中,我获得了所有与书籍映射的作者实体,这是为作者提供的所有书籍,如下所示:

<td>{{ author.books|length}}</td>

所以我认为应该有某种Twig日期时间过滤器只能显示上个月添加的书籍。我已经看到了this问题以及更多关于SO的问题,但它们主要与格式化日期而不是处理间隔有关。欢迎任何想法,谢谢。

编辑1控制器代码

<?php
namespace AB\ProjectBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Doctrine\Common\Collections\Criteria;
use Symfony\Component\HttpFoundation\Response;
use AB\ProjectBundle\Entity\Book;

class AuthorController extends Controller
{
public function indexAction()
{
    $em = $this->getDoctrine()->getManager();
$userid = $this->container->get('security.context')->getToken()->getUser()->getId();    
$entity = $em->getRepository('ABProjectBundle:Authors')->findBy(array('userid'=>$userid));

$books = $entity[0]->getBooks();

$criteria = Criteria::create()
        ->where(Criteria::expr()->gte("datecreation", "2016-03-15"))
        ->orderBy(array("datecreation" => Criteria::ASC))
        ->setFirstResult(0)
        ->setMaxResults(20)
        ;

$filtered = $books->matching($criteria);
$twig = 'ABProjectBundle::index.html.twig';
$paramTwig = array(
        'authors'        => $entity,
        'filtered'       => $filtered,
    );

    return $this->render($twig, $paramTwig);
}

1 个答案:

答案 0 :(得分:2)

树枝上没有这样的东西。您需要在QueryBuilder/DQL(添加所需where)级别或使用Doctrine Collection Filtering过滤您的收藏集。

示例:

use Doctrine\Common\Collections\Criteria;

// get $author

$bookCollection = $author->getBooks();

$criteria = Criteria::create()
    ->where(Criteria::expr()->gte("added_date", "2015-02-17"))
    ->orderBy(array("added_date" => Criteria::ASC))
    ->setFirstResult(0)
    ->setMaxResults(20)
;

$filteredAuthorBooks = $bookCollection->matching($criteria);

然后将此传递给您的视图。尽量不要在模板中构建任何复杂的逻辑或过滤。在您的情况下,最好的是在join查询中使用Author从数据库获取所需的结果。