Wreszcie używamy paczki, którą zainstalowaliśmy na początku, tworząc projekt Symfony. Zrobimy taki prosty seeding bazy danych. Do dzieła.
Ok, rzućmy okiem na nasze entity:
#[ORM\Entity(repositoryClass: MicroPostRepository::class)]
class MicroPost
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $content = null;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): static
{
$this->title = $title;
return $this;
}
public function getContent(): ?string
{
return $this->content;
}
public function setContent(string $content): static
{
$this->content = $content;
return $this;
}
}
W nowym Symfony jest sporo zmian. Na przykład, wiele atrybutów wygląda na nullable, ale jest to tylko dla warstwy abstrakcji Symfony, wcale nullable nie są (miałyby nullable na true).
Inna zmiana to taka, że nie zawsze musimy podawać typ kolumny (to znaczy, nie zawsze są podawane, maker tworzy entity). W przypadku typu text, owszem, jest podawany. W przypadku różnych varcharów po atrybucie length oraz typie string Symfony domyśla się jakiego typu użyć.
Nie zawsze tak było i możemy natknąć się na stare kody, gdzie column type jest podawane dosłownie dla każdego rodzaju. Cóż, Symfony stało się dużo bardziej domyślne, ale też jest to dość nowa zmiana i jeżeli planujemy uczyć się na podstawie legacy code albo jakichś tutoriali, powinniśmy o tym pamiętać.
Tym niemniej nas interesują metody, które ma entity. A teraz przechodzimy do AppFixture:
use App\Entity\MicroPost;
class AppFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$post1 = new MicroPost();
$post1->setTitle("First Post");
$post1->setContent("Lorem ipsum");
$manager->persist($post1);
$post2 = new MicroPost();
$post2->setTitle("2nd Post");
$post2->setContent("Lorem ipsum 123");
$manager->persist($post2);
$post3 = new MicroPost();
$post3->setTitle("3rd Post");
$post3->setContent("Lorem ipsum 321");
$manager->persist($post3);
$post4 = new MicroPost();
$post4->setTitle("Another post");
$post4->setContent("Some content");
$manager->persist($post4);
$manager->flush();
}
}
W Symfony jest takie podejście, że jest repository i entity. Dodawaniem do bazy danych zajmuje się entity manager. Zbieraniem kolekcji rekordów repository (mamy micro post repository, ale o tym później). Nie ma też tak łatwo w przypadku robienia query, w Laravelu mieliśmy bardziej fasadowy mechanizm.
Tak czy inaczej tutaj mamy przykład stworzenia 4 postów i zapisania do bazy danych. Odpalamy przy pomocy komendy:
symfony console doctrine:fixtures:load
I czytamy co nam terminal wypisuje (umiejętność czytania tego, co zwraca terminal czy error to jedna z najbardziej niedocenianych umiejętności programistów, nawet dobrzy się na to łapią) nie wciskamy bezmyślnie enter.
Musimy tę komendę użyć i wpisać yes. Teraz w bazie danych będziemy mieli 4 posty.
Ok, więcej Symfony już niedługo.