Problème d'affichage des données de deux tables différents relation ManyToMany
dellai.najeh
Messages postés
16
Date d'inscription
samedi 25 août 2018
Statut
Membre
Dernière intervention
10 mars 2019
-
Modifié le 21 déc. 2018 à 09:06
Bonjour,
j'ai 2 problèmes à poser : le 1er problème est que lors de l'affichage des données depuis la base de données, en fait j'ai 3 entités ( Enseignant, EnseignantLangue et Langue) . la relation est manytomany entre Entre enseignant et EnseignantLangue. Lors de l'affichage du datatable je veux afficher les ddonnées du Enseignant et la description de Enseignant. Le problème c'est qu'on j'affiche la description elle me renvoie toujours la description de la 1ere instance pour tous les autres ( elle se répète) je n'ai pas pu afficher la description de chaque EnseignantLangue pour chaque Enseignant.
le 2ème problème : quand mes tables sont vides et quand je lance la route de la page index (liste des enseignant) elle me renvoie cette erreur " Undefined Offset : 0 " quand il éxécute cette ligne
j'ai passé 2 jours et je n'arrive à trouver la solution due au manque connaissance au développement.
Merci de donne l'aide et pour votre compréhension
voici ma fonction:
/**
* @Route("/",name="index_enseignant")
*/
public function indexAction(Request $request) {
//get entity manager
$em = $this->getDoctrine()->getManager();
//get id of selected language
$choice=$request->get('lang');
//get the list of existant language Fr, An, ...
$langues=$em->getRepository('MDWEBAdminBundle:Langue')->findAll();
if($choice!=null && $choice!=''){
//get the id of selected language
$langue=$em->getRepository('MDWEBAdminBundle:Langue')->find($choice);
//find enseignants in order of laguage or by date
$enseignants = $em->getRepository('MDWEBAdminBundle:Enseignant')->findinOrder($langue);
//get the id of selected langage
$defaultLangue=$langue->getId();
//if there no instance of enseignant
if(count($enseignants)==0){
return $this->render('MDWEBAdminBundle:Enseignant:index.html.twig', array(
'enseignants' => array(),
'enseignantLangue'=>null,
'langues'=>$langues,
'defaultselectedLangue'=>$defaultLangue
));
}
else{
$enseignantLangue=$enseignants[0]->getEnseignantLangue();
}
}
else{
/* Try to find content for the default Language French*/
$langue=$em->getRepository('MDWEBAdminBundle:Langue')->findBy(array('name'=>'Fr'));
$enseignants = $em->getRepository('MDWEBAdminBundle:Enseignant')->findinOrder($langue);
$defaultLangue=$langue;
/* if there's none, try to get the next Content by InsertionDate */
if(count($enseignants)==0){
$enseignantLangue=$this->findContentByLanguage($enseignants[0]);
$defaultLangue=$enseignantLangue[0]->getLangue();
$enseignants = $em->getRepository('MDWEBAdminBundle:Enseignant')->findinOrder($defaultLangue);
}
else{
$enseignantLangue=$enseignants[0]->getEnseignantLangue();
}
}
$website = $this->container->getParameter('website');
return $this->render('MDWEBAdminBundle:Enseignant:index.html.twig', array(
'website'=>$website,
'enseignants' => $enseignants,
'enseignantLangue'=>$enseignantLangue[0],
'langues'=>$langues,
'defaultselectedLangue'=>$defaultLangue
));
}
/*
* Try to find the content in the default Language French
* if not try to get the next Content by InsertionDate
*/
public function findContentByLanguage($enseignant){
$em = $this->getDoctrine()->getManager();
$langue=$em->getRepository('MDWEBAdminBundle:Langue')->findBy(array('name'=>'Fr'));
$enseignantLangue=$em->getRepository('MDWEBAdminBundle:EnseignantLangue')->findBy(array('enseignant' => $enseignant,'langue' => $langue));
if(count($enseignantLangue)==0){
$enseignantLangue=$em->getRepository('MDWEBAdminBundle:EnseignantLangue')->findBy(array('enseignant' => $enseignant),array('createdAt'=>'DESC'));
}
return $enseignantLangue;
}
<?php
namespace MDWEB\AdminBundle\Repository;
/**
* EnseignantRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class EnseignantRepository extends \Doctrine\ORM\EntityRepository
{
// get enseignants by selected language
// if there is no language is selected
// display by date de creation
public function findinOrder($lang = null)
{
$qb = $this->createQueryBuilder('e');
$qb ->select('e')
->where('e.deleted =0');
if ($lang != null) {
$qb->innerJoin('e.enseignantLangue', 'el')
->andWhere('el.langue = :lang')
->setParameter('lang', $lang);
}
$qb->orderBy('e.createdAt', 'DESC');
return $qb->getQuery()->getResult();
}
}