Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF2][Symfony2][Sonata][Doctrine] Lista wyboru w form sonata admin bundle z entities, Lista wyboru w form sonata admin bundle z entities
Gothicbezimienny
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


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. .


Ten post edytował Gothicbezimienny 25.08.2016, 14:44:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
emstawicki
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


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


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


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. ));


Ten post edytował Gothicbezimienny 26.08.2016, 09:15:22
Go to the top of the page
+Quote Post
emstawicki
post
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


http://symfony.com/doc/2.8/doctrine.html#f...om-the-database

Pobierz przed tworzeniem formularza a potem wsadź jako tablicę do buildera.


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


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.

Ten post edytował Gothicbezimienny 26.08.2016, 10:09:43
Go to the top of the page
+Quote Post
Damonsson
post
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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ć?
Go to the top of the page
+Quote Post
Gothicbezimienny
post
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.11.2014

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


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. }


Ten post edytował Gothicbezimienny 31.08.2016, 14:28:32
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #8





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


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.


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
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 - 06:52