Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2][Symfony2][Sonata][Doctrine] Lista wyboru w form sonata admin bundle z entities
Forum PHP.pl > Forum > PHP > Frameworki
Gothicbezimienny
Witam,

Tak jak w tytule używam: Symfony 2.8, sonata(admin i media bundle), i mapowanie bazy danych za pomoc doctrine (ORM);

Próbuje zrobić listę(rozwijana) wybierania w bundle admin sonata. I tu pytanie jak to zrobic, samo zrobienie listy wybieranej zrobiłem

  1. $formMapper
  2. ->add('status','choice', array())
  3.  


wyświetla mi pusta liste wyboru, aby ustawić wartości w liscie pwnie trzeba dodac do array klucz=>wartośc, ale jak to zrobic by pobrać klucz wartość z bazy przez entity z tabeli rodzajOferty i zapisac wybrana opcje do zmiennej w tabeli ogłoszenia $rodzajOferty? Jeśli chodzi o bazę danych skonstruowana jest w tai sposób:

Tabele wygladaja tak jak poniżej, z połączeniem FK, dane w tabeli rodzajoferty, które chciałbym wyświetlić na liście wyglądają tak (tzn wyświetlić na liście rodzaj1, rodzaj2, rodzaj3 itp a do danej $rodzajOferty w tabeli ogloszenia przypisac id z tabeli rodzajOferty):.
  1. id wartosc
  2. 1 rodzaj1
  3. 2 rodzaj2
  4. 20 rodzaj3
  5. 100 rodzaj4

czyli:
  1. /**
  2.  * @ORM\Entity
  3.  * @ORM\Table(name="ogloszenie")
  4.  */
  5. class Ogloszenie {
  6. .
  7. .
  8. .
  9.  
  10. /**
  11.   * @ORM\ManyToOne(targetEntity="RodzajOferty")
  12.   * @ORM\JoinColumn(name="rodzaj_oferty", referencedColumnName="id", nullable=true)
  13.   */
  14. protected $rodzajOferty;
  15. .
  16. .
  17. .


  1. /**
  2.  * @ORM\Entity
  3.  * @ORM\Table(name="RodzajOferty")
  4.  */
  5. class RodzajOferty {
  6.  
  7. /**
  8.   * @ORM\Column(type="integer")
  9.   * @ORM\Id
  10.   */
  11. private $id;
  12.  
  13. /**
  14.   * @ORM\Column(type="string")
  15.   */
  16. private $wartosc;
  17. .
  18. .
  19. .
emstawicki
W tablicy powinieneś przekazać przede wszystkim `label` - chyba jasne oraz `choices` czyli rezultaty z Doctrine.

http://symfony.com/doc/2.8/reference/forms/types/choice.html
Gothicbezimienny
Niestety nie wiem jak to zrobić mimo Twojej podpowiedzi, mógłbyś mi jakoś to bardziej przybliżyć ?

jesli chodzi o cos takiego to ok tylko nie wiem jak odwoływać sie do rezultatów z doctrine by one były na liscie wybieranej
  1.  
  2. $formMapper
  3. ->add('rodzajOferty','choice', array(
  4. 'choices' => array(
  5. 'wartosc' => 'id',
  6.  
  7.  
  8. )
  9. ));
emstawicki
http://symfony.com/doc/2.8/doctrine.html#f...om-the-database

Pobierz przed tworzeniem formularza a potem wsadź jako tablicę do buildera.
Gothicbezimienny
Okej udało mi sie to zrobić, zupełnie nie tak jak proponowałeś ale i tak dzięki:) rozwiązanie:
  1. protected function configureFormFields(FormMapper $formMapper)
  2. {
  3. $formMapper
  4. ->add('rodzajOferty', EntityType::class, array(
  5. 'label' => 'Rodzaj Oferty',
  6. 'multiple' => false,
  7. 'expanded' => false,
  8. 'class' => sciezka do klasy ::class
  9. ))
  10.  
  11.  
  12.  
  13. ;
  14.  
  15.  
  16. }


Od razu zapytam w tym temacie by nie zaśmiecać czy da sie takie pole ustawić jakoś na hidden z z wybraną wartościa default. Potrzebne mi sie to ponieważ @JoinColum w doctrine nie ma możliwości ustawienia wartości domyślnej a przydała by sie taka możliwość, i fajnie by było takie pole ukryć u stawić na nim wartość domyślną . Bo np. opcja 'disabled' => true, była by spoko lecz nie ustawia wartości domyślnej.
Damonsson
Zadajesz, wydaje mi się, złe pytania, myśląc, że taka droga rozwiązania jest dobra. Zacznijmy więc od pytania do Ciebie.

Co chcesz zrobić? Czy dobrze rozumiem, że chcesz aby rodzajOferty miał zawsze określoną wartość i użytkownik nie widział tej wartości i nie mógł jej zmienić?
Gothicbezimienny
Hymm okej to opisz dokładnie.

Mam ogłoszenia które maja ogólnie wiele opcji min. rodzajOferty tworze to tego ogłoszenia możliwości CRUD, aktualnie zajmuje sie tworzeniem formularza który zapisze dane do bazy danych. ORM.

rodajOferty udało se zrobić, mam też zmienna status która ma strukture identyczna do rodzajOferty(dlatgo podałem ten sam przykład), lecz informuje o czymś innym. I chciałbym by przy tworzeniu nowego ogłoszenia rodzaj można było wybrać (up lista, co udało sie stworzyć), i status który byłby domyślnie wybierany(np. pierwsza dana z bazy)w tym formularzu, ale nie przez użytkownika ta zmiana będzie dostępna potem w edycji.

  1.  
  2. /**
  3.   * @ORM\ManyToOne(targetEntity="Status")
  4.   * @ORM\JoinColumn(name="status", referencedColumnName="id", nullable=true)
  5.   */
  6. protected $status;


  1. class Status {
  2.  
  3. /**
  4.   * @ORM\Column(type="integer")
  5.   * @ORM\Id
  6.   */
  7. public $id;
  8.  
  9. /** @ORM\Column(type="string")*/
  10. public $status;
  11.  


W bazie sa wprowadzone statusy np.

  1. id status
  2. 10 aktywne
  3. 60 niekatywne
  4. 100 wersjaRobocza



I teraz chciałbym aby ustawić pole status niewidoczne dla użytkownika przy tworzeniu ogłoszenia z ustawieniem na status aktywne. Zmiana statusu była by dostępna w edycji ogłoszeń.


################################################################################
####################NOWE PYTANIE ##################################################
################################################################################
################################################################################


Tutaj też poradziłem sobie już używając funkcji prePersist($object).

Mam kolejne pytanie, może ktoś wie bo nie moge znaleźć informacji, w dokumentacji tez nie widzę(może ślepy biggrin.gif). A uczę się tego i nie znam wielu opcji.

Czy w doctrine ORM w adnotacji dla PK można użyć relacji

czyli np. (to jest przykład ale o coś takiego mi chodzi ale nie przechodzi, bład to : No identifier/primary key specified for Entity {sciezka entity} Every Entity must have an identifier/primary key. )

rozumiem o co się pluje ale czy da się coś takiego zrobić jak poniżej tylko aby to działało?
  1. class Marka{
  2.  
  3. /*
  4. *@ORM\Id
  5. * @ORM\ManyToMany(targetEntity="{sciezka do entity}Model")
  6.   * @ORM\JoinTable(name="marka_model",
  7.   * joinColumns={@ORM\JoinColumn(name="id_marka", referencedColumnName="id")},
  8.   * inverseJoinColumns={@ORM\JoinColumn(name="id_model", referencedColumnName="id", unique=true, nullable=true)}
  9.   * )
  10. */
  11. public $id;
  12. .
  13. .
  14. .
  15. .
  16.  
  17. }
kpt_lucek
To co próbujesz zrobić niżej, nie ma najmniejszego sensu, chyba, że robisz one2one... Chociaż nie, tam też nie, przybliż może co chcesz osiągnąć, to może stanie się to bardziej zrozumiałe.
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.