Autor Wątek: Ładowanie selecta "kategorie" z encji  (Przeczytany 4342 razy)

Marceli99

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Ładowanie selecta "kategorie" z encji
« dnia: Listopada 18, 2018, 18:53:56 »
Cześć, jestem raczkujący w symfony. Niemniej jednak bardzo mi się to podoba i chcę się w tym rozwijać. Niestety zbyt bystry nie jestem, bo od dwóch dni próbuję do selecta załadować wartości z encji.

Mam encję Categories:
<?php

namespace App\Entity;

use 
Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ChocoCategoriesRepository")
 */
class ChocoCategories
{
    
/**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    
private $id;

    
/**
     * @ORM\Column(type="string", length=255)
     */
    
private $category;

    public function 
getId(): ?int
    
{
        return 
$this->id;
    }

    public function 
getCategory(): ?string
    
{
        return 
$this->category;
    }

    public function 
setCategory(string $category): self
    
{
        
$this->category $category;

        return 
$this;
    }
}


Taki jest problem. To co pobieram z tej encji jest obiektem, a ja to wstawiam do tabelki z postami. Nie wiem co w tej sytuacji zrobić... Wiem, że istnieje metoda toString, ale nie wiem jak jej użyć konkretnie... Zdaję sobie sprawę, że to takie "sztywne" rozwiązanie, ale od czegoś trzeba zacząć.

W tabelki z postami dodałem kolumnę category jako string. No i docelowo to tam ma trafić kategoria.

Valantir

  • Global Moderator
  • Hero Member
  • *****
  • Wiadomości: 593
    • Zobacz profil
Odp: Ładowanie selecta "kategorie" z encji
« Odpowiedź #1 dnia: Listopada 18, 2018, 21:53:35 »
Jak dobrze zauważyłeś, problem jest przy konwersji obiektu do stringa. Otóż w symfony dane pobierane z bazy są reprezentowane przez obiekty (kolekcję obiektów lub poszczególny obiekt). Otóż po pobraniu wszystkich encji do select'a, jest to tablica obiektów. W formularzu natomiast w select'cie będzie wyświetlany zwykły string. W tym momencie framework ma problem z konwersją. Aby mu w tym pomóc, w klasie encji, którą pobierasz do selecta (ChocoCategories) powinieneś zaimplementować metodę __toString:

public function __toString() {
    return (string) $this->name;
}

Nie wiem czy masz taką właściwość w encji jak name. Jeśli nie, to wpisz tam właściwość, dzięki której użytkownik będzie wiedział jaką opcję wybiera. Należy pamiętać jedną rzecz - metoda __toString nie może rzucić wyjątku!!

Marceli99

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Odp: Ładowanie selecta "kategorie" z encji
« Odpowiedź #2 dnia: Listopada 21, 2018, 16:27:04 »
Dziękuję bardzo za pomoc.  :) :) :) :)