Tworzę stronę opartą o framework Symfony 3.0 i dotarłem do momentu, w którym nie za bardzo wiem jak go rozwiązać.
Przykładowo: mam takie encje
AbstractTaxonomy:
abstract class AbstractTaxonomy { /** * @ORM\Id * @ORM\Column(type = "integer") * @ORM\GeneratedValue(strategy = "AUTO") */ private $id; /** * @ORM\Column( type = "string", length = 240) */ private $name; }
Params:
class Params extends AbstractTaxonomy { /** * @ORM\Column( type = "string", length = 240) */ private $type; /** * @ORM\OneToMany(targetEntity = "ParamsValue", mappedBy = "params") */ private $value; /** * @ORM\OneToMany(targetEntity = "OfferParams", mappedBy = "params") */ private $offer; }
ParamsValue:
class ParamsValue extends AbstractTaxonomy { /** * @ORM\ManyToOne(targetEntity = "Params", inversedBy = "value") * @ORM\JoinColumn(name = "id_params", referencedColumnName = "id") */ private $params; /** * @ORM\OneToMany(targetEntity = "OfferParams", mappedBy = "paramsValue") */ private $offer; }
Offer:
class Offer extends AbstractTaxonomy { /** * @ORM\OneToMany(targetEntity = "OfferParams", mappedBy = "offer") */ private $offerParams; }
OfferParams:
class OfferParams { /** * @ORM\ManyToOne(targetEntity = "Offer", inversedBy = "offerParams") * @ORM\JoinColumn(name = "id_offer", referencedColumnName = "id") */ private $offer; /** * @ORM\ManyToOne(targetEntity = "Params", inversedBy = "offer") * @ORM\JoinColumn(name = "id_params", referencedColumnName = "id") */ private $params; /** * @ORM\ManyToOne(targetEntity = "ParamsValue", inversedBy = "offer") * @ORM\JoinColumn(name = "id_params_value", referencedColumnName = "id") */ private $paramsValue; }
Chciałbym wygenerować teraz formularz dodania nowego rekordu dla encji Offer zakładając, że baza danych zawiera odpowiednio wartości:
Params:
+-------+------------------+ | id | name | +-------+------------------+ | 1 | Stan | | 2 | Przeznaczenie | +-------+------------------+
ParamsValue:
+-------+------------------+----------------+ | id | name | id_params | +-------+------------------+----------------+ | 1 | Nowe | 1 | | 2 | Używane | 1 | | 3 | Kuchnia | 2 | | 4 | Łazienka | 2 | +-------+------------------+----------------+
Jedyne rozwiązanie jakie przychodzi mi do głowy to pobranie dostępnych parametrów wraz z ich wartościami w kontrolerze i przekazanie do widoku gdzie przy użyciu pętli wygeneruje odpowiednie pola formularza np: select. Następnie podczas dodawania ogłoszenia do bazy ręcznie pobiorę wybrane wartości i dodam je do encji offerParams. Zastanawiam się czy by można było wykonać to przy pomocy formBuildera ewentualnie jakiś inny sensowny i bezpieczny sposób?