[Symfony 3.3.6] Récupération de données

Récupération de données [Symfony 3.3.6] - PHP - Programmation

Marsh Posté le 10-06-2018 à 20:13:16    

Bonjour à tous,
 
J'ai un souci de récupération de mes données. En effet, j'ai 2 entités : Theme et Category qui sont liées par une relation ManyToOne bidirectionnelle. Ça devrait être une relation ManyToMany mais la base de données a été conçue comme ça et je ne peut pas revenir là-dessus. Mon problème quand j'essaye de récupérer mes infos du côté inverse de la relation je n'obtiens rien. Mes requêtes me renvoient un array vide et je ne sais pas comment contourner ce problème. J'avoue c'est un problème particulier car dans mon entité propriétaire Category qui contient le champ (qui est supposé être la clé étrangère) qui est un type varchar(100) et qui contient les identiants des Thèmes (Entité Theme). Voici un exemple du contenu de ce champ :
 
theme_id  
29, 34
29, 31
29
21
29, 34
25, 33, 34
29, 31, 34
 
Mon Controller est le suivant :

Code :
  1. class PostController extends Controller
  2. {
  3.     public function viewAction(Request $request)
  4.     {
  5.         $id = $request->query->get('id');
  6.         $em = $this->getDoctrine()->getManager();
  7.         $tab = [];
  8.         $themes = $em->getRepository(Theme::class)->findBy(array('id' => $id));
  9.         foreach ($themes as $theme) {
  10.             $theme = $em->getRepository(Theme::class)->find($theme->getId());
  11.             foreach ($theme->getCategories() as $cats) {
  12.                 if ($cats != null) {
  13.                     array_push($tab, $cats);
  14.                 }
  15.             }
  16.         }
  17.         return $this->render('content.html.twig', array(
  18.             'themes' => $themes,
  19.             'cats' => $tab
  20.         ));
  21.     }
  22. }


 
Ma vue:

Code :
  1. {% for theme in themes %}
  2.     <h2>{{ theme.name }}</h2>
  3.     {% for cat in theme.cats %}
  4.         <div>
  5.             <p>{{ cat.title }}</p>
  6.             <p>{{ cat.content }}</p>
  7.         </div>
  8.     {% endfor %}
  9. {% endfor %}


 
Mes entités:

Code :
  1. namespace AppBundle\Entity;
  2. use Doctrine\ORM\Mapping as ORM;
  3. /**
  4. * Theme
  5. *
  6. * @ORM\Table(name="theme" )
  7. * @ORM\Entity(repositoryClass="AppBundle\Repository\ThemeRepository" )
  8. */
  9. class Theme
  10. {
  11.     /**
  12.      * @var int
  13.      *
  14.      * @ORM\Column(name="id", type="integer" )
  15.      * @ORM\Id
  16.      * @ORM\GeneratedValue(strategy="AUTO" )
  17.      */
  18.     private $id;
  19.     /**
  20.      * @var string
  21.      *
  22.      * @ORM\Column(name="name", type="string", length=255)
  23.      */
  24.     private $name;
  25.     /**
  26.      * @ORM\OneToMany(targetEntity="AppBundle\Entity\Category", mappedBy="theme" )
  27.      */
  28.     private $categories;
  29.     /**
  30.      * Get id
  31.      *
  32.      * @return int
  33.      */
  34.     public function getId()
  35.     {
  36.         return $this->id;
  37.     }
  38.     /**
  39.      * Set name
  40.      *
  41.      * @param string $name
  42.      *
  43.      * @return Theme
  44.      */
  45.     public function setName($name)
  46.     {
  47.         $this->name = $name;
  48.         return $this;
  49.     }
  50.     /**
  51.      * Get name
  52.      *
  53.      * @return string
  54.      */
  55.     public function getName()
  56.     {
  57.         return $this->name;
  58.     }
  59.     /**
  60.      * Constructor
  61.      */
  62.     public function __construct()
  63.     {
  64.         $this->categories = new \Doctrine\Common\Collections\ArrayCollection();
  65.     }
  66.     /**
  67.      * Add category
  68.      *
  69.      * @param \AppBundle\Entity\Category $category
  70.      *
  71.      * @return Theme
  72.      */
  73.     public function addCategory(\AppBundle\Entity\Category $category)
  74.     {
  75.         $this->categories[] = $category;
  76.         $this->categories->add($category);
  77.         $category->setTheme($this);
  78.         return $this;
  79.     }
  80.     /**
  81.      * Remove category
  82.      *
  83.      * @param \AppBundle\Entity\Category $category
  84.      */
  85.     public function removeCategory(\AppBundle\Entity\Category $category)
  86.     {
  87.         $this->categories->removeElement($category);
  88.     }
  89.     /**
  90.      * Get categories
  91.      *
  92.      * @return \Doctrine\Common\Collections\Collection
  93.      */
  94.     public function getCategories()
  95.     {
  96.         return $this->categories;
  97.     }
  98. }
  99. namespace AppBundle\Entity;
  100. use Doctrine\ORM\Mapping as ORM;
  101. /**
  102. * Category
  103. *
  104. * @ORM\Table(name="category" )
  105. * @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository" )
  106. */
  107. class Category
  108. {
  109.     /**
  110.      * @var int
  111.      *
  112.      * @ORM\Column(name="id", type="integer" )
  113.      * @ORM\Id
  114.      * @ORM\GeneratedValue(strategy="AUTO" )
  115.      */
  116.     private $id;
  117.     /**
  118.      * @var string
  119.      *
  120.      * @ORM\Column(name="title", type="string", length=255)
  121.      */
  122.     private $title;
  123.     /**
  124.      * @var string
  125.      *
  126.      * @ORM\Column(name="content", type="text" )
  127.      */
  128.     private $content;
  129.     /**
  130.      * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Theme", inversedBy="categories" )
  131.      * @ORM\JoinColumn(name="id", referencedColumnName="id" )
  132.      */
  133.     private $theme;
  134.     /**
  135.      * Get id
  136.      *
  137.      * @return int
  138.      */
  139.     public function getId()
  140.     {
  141.         return $this->id;
  142.     }
  143.     /**
  144.      * Set title
  145.      *
  146.      * @param string $title
  147.      *
  148.      * @return Category
  149.      */
  150.     public function setTitle($title)
  151.     {
  152.         $this->title = $title;
  153.         return $this;
  154.     }
  155.     /**
  156.      * Get title
  157.      *
  158.      * @return string
  159.      */
  160.     public function getTitle()
  161.     {
  162.         return $this->title;
  163.     }
  164.     /**
  165.      * Set content
  166.      *
  167.      * @param string $content
  168.      *
  169.      * @return Category
  170.      */
  171.     public function setContent($content)
  172.     {
  173.         $this->content = $content;
  174.         return $this;
  175.     }
  176.     /**
  177.      * Get content
  178.      *
  179.      * @return string
  180.      */
  181.     public function getContent()
  182.     {
  183.         return $this->content;
  184.     }
  185.     /**
  186.      * Set theme
  187.      *
  188.      * @param \AppBundle\Entity\Theme $theme
  189.      *
  190.      * @return Category
  191.      */
  192.     public function setTheme(\AppBundle\Entity\Theme $theme = null)
  193.     {
  194.         $this->theme = $theme;
  195.         return $this;
  196.     }
  197.     /**
  198.      * Get theme
  199.      *
  200.      * @return \AppBundle\Entity\Theme
  201.      */
  202.     public function getTheme()
  203.     {
  204.         return $this->theme;
  205.     }
  206. }


 
Merci par avance

Reply

Marsh Posté le 10-06-2018 à 20:13:16   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed