Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Doctrine, PostgreSql 10.7, Symfony 4
Forum PHP.pl > Forum > Przedszkole
kamil_lk
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?
kapslokk
Dlaczego trzymasz te dane w json, a nie jako normalna relacje?
kamil_lk
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',
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.