Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony2][inny][SF2]Pobieranie z bazy tablicy z obiektami - jak?
michau85
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


Witajcie. Mam dwie tabele - "Product" i "Category" połączone relacją jeden do wielu. Chciałbym wyświetlić listę wszystkich produktów i powiązanych z nimi kategorii. Nie mam problemu z jednym obiektem. Pobieram go w kontrolerze i wyświetlam w widoku tak jak niżej:

  1. /// Kontroler
  2. $product=$this->getDoctrine()->getRepository('EmBundle:Product')->findOneById($id);
  3. return $this->render('EmBundle:Default:lista.html.twig',array('product'=>$product))

  1. /// Widok
  2. Nazwa produktu {{product.name}}
  3. Kategoria produktu {{product.category.name}}


Problem pojawia się gdy w kontrolerze zastosuje:

  1. /// Kontroler
  2. $products=$this->getDoctrine()->getRepository('EmBundle:Product')->findAll();
  3. return $this->render('EmBundle:Default:lista.html.twig',array('products'=>$products))


Wtedy w widoku mam:
  1. /// Widok
  2.  
  3. {% for p in products%}
  4. <p>{{ p.name }} {{ p.category.name}}</p>
  5. {% endfor %}


I tutaj pojawia się błąd mówiący o tym że array nie posiada pola category.name Krótko mówiąc - Jak wyświetlić listę wszystkich produktów i przypisanych kategorii w widoku? Proszę o pomoc.







Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
michau85
post
Post #2





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


Problem rozwiązałem używając DQL:
  1. ///Kontroler
  2. $m=$this->getDoctrine()->getManager();
  3. $query=$m->createQuery('SELECT p FROM EmBundle:Product p JOIN p.category c');
  4. $products=$query->getResult();
  5. return $this->render('EmBundle:Bot:uczniowie.html.twig',array('products'=>$products));
  6.  


  1. ///Widok
  2. {% for p in products%}
  3. <p>
  4. {{p.name}} {{p.category.name}}
  5. </p>
  6. {% endfor %}


Załączam również Encje

  1. ///Product
  2. class Product
  3. {
  4. /**
  5.   * @var int
  6.   *
  7.   * @ORM\Column(name="id", type="integer")
  8.   * @ORM\Id
  9.   * @ORM\GeneratedValue(strategy="AUTO")
  10.   */
  11. private $id;
  12.  
  13. /**
  14.   * @var string
  15.   *
  16.   * @ORM\Column(name="name", type="string", length=255)
  17.   */
  18. private $name;
  19.  
  20. /**
  21.   * @ORM\ManyToOne(targetEntity="Category", inversedBy="products",cascade={"persist"})
  22.   * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
  23.   */
  24. protected $category;


  1. ///Category
  2. class Category
  3. {
  4. /**
  5.   * @var int
  6.   *
  7.   * @ORM\Column(name="id", type="integer")
  8.   * @ORM\Id
  9.   * @ORM\GeneratedValue(strategy="AUTO")
  10.   */
  11. private $id;
  12.  
  13. /**
  14.   * @var string
  15.   *
  16.   * @ORM\Column(name="name", type="string", length=255)
  17.   */
  18. private $name;
  19.  
  20. /**
  21.   * @ORM\OneToMany(targetEntity="Product", mappedBy="category",cascade={"persist"})
  22.   */
  23. protected $products;
  24.  
  25. public function __construct()
  26. {
  27. $this->products = new ArrayCollection();
  28. }
  29.  




Ten post edytował michau85 20.03.2016, 18:54:34
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 02:46