Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Doctrine]atrybuty category, subcategory w klasie products
alfredNN
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 19.12.2016

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


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.

Ten post edytował alfredNN 20.12.2016, 00:18:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
ohm
post
Post #2





Grupa: Zarejestrowani
Postów: 623
Pomógł: 144
Dołączył: 22.12.2010

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


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()
Go to the top of the page
+Quote Post
alfredNN
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 19.12.2016

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


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 "?

Ten post edytował alfredNN 20.12.2016, 13:28:57
Go to the top of the page
+Quote Post
Boshi
post
Post #4





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


To, że można stworzyć strukturę parent-child dla kategorii.
http://docs.doctrine-project.org/projects/...elf-referencing
Go to the top of the page
+Quote Post
alfredNN
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 19.12.2016

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


Mam jeszcze jedno pytanie, czy operacje np. liczbowe wykonywać w encji czy utworzyć klasę która będzie dziedziczyć po encji?
Go to the top of the page
+Quote Post
lukaskolista
post
Post #6





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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.
Go to the top of the page
+Quote Post
alfredNN
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 19.12.2016

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


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
Go to the top of the page
+Quote Post
Boshi
post
Post #8





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


W bazie trzyma się tylko ścieżki do zdjęc na serwerze a nie same zdjęcia.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 03:46