Bedankt alvast voor het lezen van mijn topic. Deze topic komt voort uit mijn vorige topic: [Symfony2] Hoe ....c.m. twig
Mijn vorige topic biedt een oplossing, echter is gebleken dat hetgeen dat ik wil wat complexer is. Vandaar deze nieuwe topic.
Voor het gemak zal ik nog even de kardinaliteit van de ralatie herhalen. De ralatie ziet er visueel als volgt uit:
[Page] ---(0..N)--- hoort bij ---(1..1)--- [Category]
Een pagina hoort altijd bij 1 categorie en een categorie heeft 0 of meerdere pagina's in zich.
Het gaat dus om 2 objecten:
1.) Category
2.) Page
Inmiddels heb ik op advies van WouterJ een OneToMany relatie gelegd tussen object Category en Page. Nu staan alle pagina's netjes geordend onder de category, zoals omschreven staat in mijn vorige topic. Ook zijn alle properties van beide objecten netjes beschikbaar.
Nu, met deze topic, wil ik een stapje verder: een pagina heeft namelijk ook een status: Niet gepubliceerd, Concept, Gepubliceerd. Deze benaming komt voort uit een derde object die middels property fkStatusid via object pagina is gelinkt. Je kunt ervan uitgaan dat een pagina altijd een status heeft.
Ik weet nu, dat ik hiervoor gebruik moet maken van een zogenaamde repositoryclass. Ondertussen heb ik die geschreven.
<?php
// src/Acme/CmsBundle/Entity/CategoryRepository.php
namespace Acme\CmsBundle\Entity;
use Doctrine\ORM\EntityRepository;
class CategoryRepository extends EntityRepository
{
public function findAllPagesByStatus($status)
{
$results = $this->getEntityManager()
->createQuery('SELECT d FROM AcmeCmsBundle:Category d ORDER BY d.name ASC')
->getResult();
$item = array();
foreach ($results as $result)
{
$pages = $result->getFkPageid();
// Plaats category item in de array
$item[$result->getName()][] = $result;
foreach($pages as $record)
{
// Controleer of een pagina de juiste status heeft
if($record->getFkPageid()->getfkStatusid() == $status)
{
// Plaats de pagina bij de juiste category in de array
$item[$result->getName()]['pages'][] = $record;
}
}
}
return $item;
}
}
?>
Hi UpLink,
Bedankt voor de link naar de tutorial. Het is een praktische link voor de beginner met Twig, de tutorial schiet helaas tekort voor mijn situatie.
Ik ben nu al een tijdje bezig met het Symfony2 Framework (aanrader), waar Twig standaard ingebakken zit, dus de basic's snap ik.
Het betreft een complexe situatie, het is daarom handig je bedreven bent met het Symfony2 Framework.
Dus mocht je ook een app willen bouwen, dan is het slim om dat framework te kiezen, dan kunnen we elkaar helpen.
Deze forum post moet je eigenlijk wat breder zien dan enkel en alleen Twig. Het gaat om het geheel: het ophalen van gegevens, het bewerken van die gegevens en tenslotte het tonen van de opgehaalde gegevens op het scherm.
Doe ik dit op de juiste manier (zie code hierboven en mijn vorige forum post) en hoe schrijf ik dan correct de twig template?
Kan ik het oplossen door een INNER JOIN met Doctrine2 te schrijven in de category repository class?
Goed, ons doel is natuurlijk dat je over een poosje dit soort vragen niet meer op het forum hoeft te plaatsen. Daarom laat ik je even zelf nadenken:
Leg mij eens van elke regel in de CategoryRepository#findAllPagesByStatus() method uit wat het doet (wat haalt het op, wat regelt het, wat controleert het, waarom?, ect.).