Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Doctrine]atrybuty category, subcategory w klasie products
Forum PHP.pl > Forum > PHP > Frameworki
alfredNN
Witam, jakiś czas temu zacząłem przygodę z symfony 3.
Napotkałem problem z pobraniem atrybutów klasy "category" w klasie "product" gdy używam klasy subcategory.
Jak stworzyć relacje aby można było pobrać atrybut image z category i subcategory w klasie product.


klasa category
  1. <?php
  2. namespace AppBundle\Entity;
  3.  
  4. use Doctrine\ORM\Mapping as ORM;
  5.  
  6. /**
  7.  * @ORM\Entity
  8.  * @ORM\Table(name="category")
  9.  */
  10.  
  11. class Category
  12. {
  13. /**
  14.   * @ORM\Column(type="integer")
  15.   * @ORM\Id
  16.   * @ORM\GeneratedValue(strategy="AUTO")
  17.   */
  18. private $id;
  19.  
  20. /**
  21.   * @ORM\OneToMany(targetEntity="Sybcategory", mappedBy="category")
  22.   */
  23. protected $category;
  24.  
  25. /**
  26.   * @ORM\Column(type="string", length=255, nullable=true)
  27.   */
  28. private $image;
  29.  
  30. }


klasa subcategory
  1. <?php
  2. namespace AppBundle\Entity;
  3.  
  4. use Doctrine\ORM\Mapping as ORM;
  5.  
  6. /**
  7.  * @ORM\Entity
  8.  * @ORM\Table(name="subcategory")
  9.  */
  10.  
  11. class Subcategory
  12. {
  13. /**
  14.   * @ORM\Column(type="integer")
  15.   * @ORM\Id
  16.   * @ORM\GeneratedValue(strategy="AUTO")
  17.   */
  18. private $id;
  19.  
  20. /**
  21.   * @ORM\ManyToOne(targetEntity="Category", inversedBy="category")
  22.   */
  23. private $category;
  24.  
  25. /**
  26.   * @ORM\Column(type="string", length=255, nullable=true)
  27.   */
  28. private $image;
  29.  
  30. /**
  31.   * @ORM\OneToMany(targetEntity="Product", mappedBy="product")
  32.   */
  33. protected $product;
  34.  
  35. }


klasa product
  1. <?php
  2. namespace AppBundle\Entity;
  3.  
  4. use Doctrine\ORM\Mapping as ORM;
  5.  
  6. /**
  7.  * @ORM\Entity
  8.  * @ORM\Table(name="product")
  9.  */
  10.  
  11. class Product
  12. {
  13. /**
  14.   * @ORM\Column(type="integer")
  15.   * @ORM\Id
  16.   * @ORM\GeneratedValue(strategy="AUTO")
  17.   */
  18. private $id;
  19.  
  20. /**
  21.   * @ORM\ManyToOne(targetEntity="Subcategory", inversedBy="subcategory")
  22.   */
  23. private $subcategory;
  24.  
  25. /**
  26.   * @ORM\Column(type="string", length=255, nullable=true)
  27.   */
  28. private $description;
  29. }

setery i getery generowane automatycznie.
Klasy są przykładowe.
ohm
Pomijając że subcategory mogłoby być typem category wink.gif To masz:
1. Błąd - * @ORM\OneToMany(targetEntity="Sybcategory", mappedBy="category")
2. uzywaj z poziomu konsoli (app|bin)/console doctrine:schema:validate - przy @OneToMany lepiej używaj liczby mnogiej (categories, products, itp)
3. Odpowiadając na pytanie, $product->getSubcategory()->getImage() dla subcategory i $product->getSubcategory()->getCategory()->getImage()
alfredNN
Dzięki za odpowiedź.
1. Literówka. Prawdziwe klasy są inne, Category, Subcategory i Product są tylko przykładami.
2. Dziękuje za cenną uwagę.
3. Gdzie użyć ten kod w modelu czy kontrolerze i jak potem wrzucić to do widoku, używam twig i zastanawiam się czy to dobre rozwiązanie.

Co znaczy że "subcategory mogłoby być typem category "?
Boshi
To, że można stworzyć strukturę parent-child dla kategorii.
http://docs.doctrine-project.org/projects/...elf-referencing
alfredNN
Mam jeszcze jedno pytanie, czy operacje np. liczbowe wykonywać w encji czy utworzyć klasę która będzie dziedziczyć po encji?
lukaskolista
Cytat
Mam jeszcze jedno pytanie, czy operacje np. liczbowe wykonywać w encji czy utworzyć klasę która będzie dziedziczyć po encji?

Wszystko zależy od tego, jak traktujesz encje. Można je traktować jako "rich model" i część logiki umieszczać własnie w nich, a można je traktować jako DTO.

Powiedz jakie konkretnie operacje chcesz wykonać?

Btw. pomysł z dziedziczeniem po encji i umieszczaniem operacji w klasie potomnej jest fatalny, katastroficznym, najgorszym z możliwych i po prostu głupim pomysłem.
alfredNN
mnożenie, dzielenie i odejmowanie ogólnie obliczanie ceny uzależnionej od kilku czynników, mam napisane cały katalog strukturalnie a teraz postanowiłem zrobić to obiektowo.
Zastanawiam się jeszcze czy trzymać zdjęcia w mysql, do tej pory trzymałem lokalnie. zdjęcia ważą do 4M
Boshi
W bazie trzyma się tylko ścieżki do zdjęc na serwerze a nie same zdjęcia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.