2016-03-28 11 views
-1

私のpreviousの質問に続いて、Iveに新しい問題がありました。私は2つのエンティティを持っています - 著者と本、1人の著者は多くの本を持つことができますが、1つの著者は1人の著者しか持っていません。今、この本には創造の日があります。先月のSymfony2小枝のショーレコード

:私は、各著者は次のように持っているどのように多くの本を示すことができる、私はすべての著者の別途どのように多くの本を表示する必要が同じテーブルで

Author Books 
Author1  5 
Author2  7 etc... 

が、これに伴い、このように、最後の月に追加されました私のDBで

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

私は本にマッピングされているすべての著者のエンティティを取得し、これはこのように、著者のためのすべての書籍を取得している:

​​

だから私は小枝datetのいくつかの種類があるはずだと思います先月に追加された本のみを表示するimeフィルタ。私はthisの質問を見ましたが、ここではもう少し詳しく述べますが、主に間隔を扱うのではなく、日付の書式設定に関連しています。どんなアイデアも歓迎します、ありがとう。

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

答えて

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

ビューにこれを渡します。テンプレートで複雑なロジックやフィルタリングを構築しないようにしてください。あなたのケースでは、joinAuthorクエリで必要な結果のみのDBからフェッチされます。

+0

私はこれを長さのビューに渡しますが、ビューではゼロだけを取得します。長さを削除すると、著者ごとにDoctrine \ Common \ Collections \ ArrayCollection @ 0000000023bf3ae5000000006ee44d9fが得られます。これが何であるか、どんな考えですか? – Jack

+0

今度は、DateTimeType.phpの53行目にFatalErrorExceptionがあります。 Error:文字列のメンバー関数format()を呼び出しています。 DBの私のadded_date列の型はTimestampで、DateTimeに変更されましたが、それは役に立たなかった。 – Jack

+0

orm.ymlファイルの列のタイプをstringに変更し、問題を解決しましたが、それが正しいかどうかはわかりません。先月の最初の著者が作成した書籍の数が正しく表示され、テーブルに残っているすべての作者に同じ番号が表示されます( – Jack

関連する問題