Práce s databází a Doctrine ORM

Symfony používá Doctrine ORM (Object-Relational Mapping) k práci s databází. Doctrine umožňuje vývojářům pracovat s databází pomocí PHP objektů namísto přímého psaní SQL dotazů. Tento článek vám ukáže, jak Doctrine funguje, jak nastavit připojení k databázi, vytvořit entity a provádět CRUD operace.

Co je Doctrine ORM a jaký má praktický význam?

Doctrine ORM je výkonný nástroj, který umožňuje:

Bez Doctrine ORM by vývojáři museli psát vlastní SQL dotazy, což je časově náročné a méně flexibilní.

1. Nastavení připojení k databázi

Doctrine ORM využívá .env soubor ke konfiguraci databázového připojení. Chcete-li používat MySQL, otevřete soubor .env a upravte řádek:

DATABASE_URL="mysql://root:heslo@127.0.0.1:3306/mojadb"

Vytvoření databáze:

php bin/console doctrine:database:create

Pokud vše proběhlo úspěšně, databáze byla vytvořena a můžete začít s tvorbou tabulek.

2. Vytvoření entity v Doctrinu

Entity v Doctrinu jsou třídy, které reprezentují tabulky v databázi. Každý sloupec v tabulce odpovídá jednomu atributu v entitě.

Příklad entity Product:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: 'products')] class Product { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private int $id; #[ORM\Column(typ: 'string', délka: 100)] private string $name; #[ORM\Column(typ: 'decimal', precision: 10, scale: 2)] private float $price; // Gettery a settery } ?>

Vytvoření databázové tabulky z entity:

php bin/console doctrine:migrations:diff php bin/console doctrine:migrations:migrate

Tento příkaz automaticky vygeneruje SQL dotazy k vytvoření tabulky products.

3. CRUD operace v Doctrine

Vložení nového produktu do databáze:

<?php $entityManager = $this->getDoctrine()->getManager(); $product = nový Product(); $product->setName('Laptop'); $product->setPrice(999.99); $entityManager->persist($product); $entityManager->flush(); ?>

Načtení dat z databáze:

$product = $entityManager->getRepository(Product::class)->find(1); echo $product->getName();

Úprava stávajícího produktu:

$product->setPrice(1099.99); $entityManager->flush();

Vymazání produktu:

$entityManager->remove($product); $entityManager->flush();

4. Použití Doctrine Repository

Chcete-li pracovat s vlastními dotazy, můžete vytvořit vlastní repository soubor.

<?php namespace App\Repository; use App\Entity\Product; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; class ProductRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Product::class); } public function findExpensiveProducts(float $price): array { return $this->createQueryBuilder('p') ->where('p.price > :price') ->setParameter('price', $price) ->getQuery() ->getResult(); } } ?>

Použití repository v kontroléru:

$expensiveProducts = $productRepository->findExpensiveProducts(500);

Nejčastější otázky

1. Jak mohu aktualizovat databázová schémata?

Použijte příkazy:

php bin/console doctrine:migrations:diff php bin/console doctrine:migrations:migrate

2. Jak mohu pracovat s více databázemi?

Stačí nakonfigurovat více připojení v doctrine.yaml a použít parametr connection.

3. Jak získat všechny entity z tabulky?

$products = $entityManager->getRepository(Product::class)->findAll();

Top 5 zajímavých faktů o Doctrine ORM

  1. Doctrine umožňuje automatické migrace bez nutnosti manuálních SQL dotazů.
  2. Podporuje několik databázových systémů, jako MySQL, PostgreSQL či SQLite.
  3. Používá Lazy Loading, což znamená, že data se načítají jen tehdy, když jsou potřebná.
  4. Doctrine podporuje práci s entitami ve formě UUID, čímž se zvyšuje bezpečnost.
  5. Mnohé velké projekty (např. Laravel) jsou inspirovány Doctrine ORM a používají jeho principy.

Chcete se naučit Symfony a Doctrine do hloubky?

Máte-li zájem o prezenční nebo online školení programování v PHP, podívejte se na naši nabídku na www.like-it.sk. Naše kurzy vedou zkušení odborníci, kteří vám pomohou zvládnout Symfony od základů až po pokročilé koncepty.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Viac informacií preberáme na kurze:

Kurz PHP - Programování dynamických webových stránek v PHP a úvod do AJAXu

Marián Knězek