Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Doctrine, PostgreSql 10.7, Symfony 4, mapowanie json
kamil_lk
post 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
Go to the top of the page
+Quote Post
kapslokk
post 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
Go to the top of the page
+Quote Post
kamil_lk
post 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


Cytat(kamil_lk @ 15.05.2019, 10:55:16 ) *
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
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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 00:59