[PHP]Doctrine, PostgreSql 10.7, Symfony 4, mapowanie json |
[PHP]Doctrine, PostgreSql 10.7, Symfony 4, mapowanie json |
7.05.2019, 14:40:12
Post
#1
|
|
Grupa: Zarejestrowani Postów: 325 Pomógł: 33 Dołączył: 31.05.2008 Ostrzeżenie: (0%) |
Cześć.
Mam tablicę user Kod - id - integer - name - string - parents - json -- id z tabeli user Przykładowe dane: Kod 1 | Jan | [2, 3] 2 | Stefan | [1, 3, 4] 3 | Marian| [] 4 | Józef | [2, 3] Encja User Kod /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string") */ private $name; /** * @ORM\Column(type="json", nullable=true) */ private $parents = []; Pod zmienną parents trzymam id rodziców. Jak mogę, i czy w ogóle się da zrobić tak, żeby pod nową zmienną, np. $parentsText widniały zmapowane nazwy (kolumna name) tych rodziców. Kod /** * Tutaj mapowanie za pomocą doctrine? */ private $parentsText = []; Ewentualnie może jakiś inny sposób wskażecie? Ten post edytował kamil_lk 7.05.2019, 14:42:17 |
|
|
7.05.2019, 14:44:13
Post
#2
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) |
Dlaczego trzymasz te dane w json, a nie jako normalna relacje?
Ten post edytował kapslokk 7.05.2019, 14:44:29 |
|
|
15.05.2019, 12:42:00
Post
#3
|
|
Grupa: Zarejestrowani Postów: 325 Pomógł: 33 Dołączył: 31.05.2008 Ostrzeżenie: (0%) |
Zmieniłem sposób przechowywania danych na relację Many to many, Self referencing
Prostując poprzedni post jest to przykład z domyślnej autoryzacji użytkownika, którą oferuje symfony, gdzie w tabeli user jest kolumna roles zawierająca poszczególne role użytkownika. Reasumując. Teraz mój kod wygląda tak Tabela USER: Kod id | name | type - Określa typ użytkownika (Tylko typ użytkownika ROLE można przypisać jakiemuś użytkownikowi) Tabela ROLES: Kod user_id | role_id Encja User: Kod /** * @ORM\ManyToMany(targetEntity="User", fetch="EAGER") * @ORM\JoinTable(name="roles", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} * ) * @var ArrayCollection */ private $roles; public function __construct() { $this->roles = new ArrayCollection(); } /** * @return array */ public function getRoles() { return $this->roles->toArray(); } /** * @param User $user * @return void */ public function addRole(User $user) { if (!$this->roles->contains($user)) { $this->roles->add($user); } } /** * @param User $user * @return void */ public function removeRole(User $user) { if ($this->roles->contains($user)) { $this->roles->removeElement($user); } } Nie za bardzo wiem jak ugryźć teraz taką kwestię. Utworzenie pola formularza w edycji użytkownika aby wyświetlić listę wszystkich dostępnych ról. Na ten moment zrobiłem w ten sposób: UserType Kod $aRoles = $this->roleRepository->getRolesList(); $builder ->add('roles', ChoiceType::class, [ 'label' => 'Uprawnienia', 'choices' => $aRoles, 'multiple' => true, 'required' => false, ]) w tym momencie wchodząc w edycję użytkownika mam listę indexów obiektu z $aRoles, a chciałbym, żeby na tej liście pokazać kolumnę name. Ogólnie edycja i zapis danych do bazy działa poprawnie, błąd jest wyświetlaniu w polu formualrza. --edit w tym momencie wchodząc w edycję użytkownika mam listę indexów obiektu z $aRoles, a chciałbym, żeby na tej liście pokazać kolumnę name. Wystarczyło dla tego pola nadać opcję 'choice_label' Kod 'choice_label' => 'name',
Ten post edytował kamil_lk 15.05.2019, 19:12:37 |
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 19:31 |