2016-03-28 7 views
-1

Nach meiner previous Frage habe ich ein neues Problem. Ich habe 2 Entitäten - Autoren und Bücher, 1 Autor kann viele Bücher haben, aber 1 Buch hat nur 1 Autor. Jetzt hat das Buch auch ein Erstellungsdatum. Ich kann zeigen, wie viele Bücher jeder Autor wie diese hat,Symfony2 Zweig zeigen Datensätze für den letzten Monat

Author Books 
Author1  5 
Author2  7 etc... 

aber zusammen mit diesem in der gleichen Tabelle I zeigen müssen separat, wie viele Bücher von jedem Autor im letzten Monat hinzugefügt wurden, wie folgt aus:

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

In meinem DB ich alle Autor Einheiten, die mit Bücher abgebildet wird, und dies wird alle Bücher für den Autor immer, wie folgt aus:

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

Also ich denke, es sollte eine gewisse Art von Zweig Tagt sein Ime Filter, der nur Bücher anzeigen würde, die im letzten Monat hinzugefügt wurden. Ive gesehen this Frage und einige mehr hier auf SO, aber sie sind hauptsächlich mit der Formatierung des Datums, anstatt mit Intervallen zu tun. Irgendwelche Ideen wären willkommen, Danke.

EDIT 1 Controller Code

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

Antwort

2

ist es nicht in Zweig wie dies alles. Sie müssen Ihre Sammlung unter QueryBuilder/DQL (erforderliche where) Ebene oder mit Doctrine Collection Filtering filtern.

Beispiel:

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

dann zu Ihrer Ansicht passieren diese. Versuchen Sie, keine komplexe Logik oder Filterung in Ihren Vorlagen zu erstellen. Am besten wäre in Ihrem Fall das Holen von DB nur benötigte Ergebnisse mit join in Author Abfrage.

+0

Ich übergebe es zur Ansicht mit | Länge, bekomme aber nur Nullen in der Ansicht. Wenn ich | länge entferne, erhalte ich Doctrine \ Common \ Collections \ ArrayCollection @ 0000000023bf3ae5000000006ee44d9f für jeden Autor. Irgendwelche Ideen, was das sein kann? – Jack

+0

Nun heißt es FatalErrorException in DateTimeType.php Zeile 53: Fehler: Aufruf an ein Mitglied Funktion Format() für Zeichenfolge. Der Typ meiner added_date-Spalte in DB ist Timestamp, änderte es zu DateTime, aber es half nicht. – Jack

+0

Der Typ der Spalte in der Datei "orm.yml" wurde in "string" geändert und das Problem wurde behoben, aber ich weiß nicht, ob dies der richtige Weg ist. Jetzt wird die Anzahl der Bücher, die vom ersten Autor im letzten Monat erstellt wurden, korrekt angezeigt und es wird die gleiche Nummer für jeden verbleibenden Autor in der Tabelle angezeigt (( – Jack

Verwandte Themen