簡體   English   中英

Symfony2 Twig顯示上個月的記錄

[英]Symfony2 Twig show records for the last month

在我之前的問題之后,我遇到了一個新問題。 我有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日期時間過濾器,該過濾器僅顯示上個月添加的書籍。 我已經看到了這個問題,還有更多關於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);
}

樹枝上沒有這樣的東西。 您需要在QueryBuilder/DQL (需要where添加)級別上過濾集合,或使用Doctrine 集合過濾來過濾集合

例:

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);

然后將其傳遞給您的視圖。 盡量不要在模板中建立任何復雜的邏輯或過濾。 最好在你的情況是從數據庫讀取只需要結果與joinAuthor查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM