Polska Społeczność Symfony - Forum

Framework => Pomoc => Wątek zaczęty przez: Marceli99 w Listopada 18, 2018, 18:53:56

Tytuł: Ładowanie selecta "kategorie" z encji
Wiadomość wysłana przez: Marceli99 w 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;
    }
}
(https://www.wolfq.uk/img/fa7b2688982529593022fc887676ce0d.png)

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.
Tytuł: Odp: Ładowanie selecta "kategorie" z encji
Wiadomość wysłana przez: Valantir w 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!!
Tytuł: Odp: Ładowanie selecta "kategorie" z encji
Wiadomość wysłana przez: Marceli99 w Listopada 21, 2018, 16:27:04
Dziękuję bardzo za pomoc.  :) :) :) :)