Práca s databázou a Doctrine ORM

Symfony používa Doctrine ORM (Object-Relational Mapping) na prácu s databázou. Doctrine umožňuje vývojárom pracovať s databázou pomocou PHP objektov namiesto priameho písania SQL dotazov. Tento článok vám ukáže, ako Doctrine funguje, ako nastaviť pripojenie k databáze, vytvoriť entity a vykonávať CRUD operácie.

Čo je Doctrine ORM a aký má praktický význam?

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

Bez Doctrine ORM by vývojári museli písať vlastné SQL dotazy, čo je časovo náročné a menej flexibilné.

1. Nastavenie pripojenia k databáze

Doctrine ORM využíva .env súbor na konfiguráciu databázového pripojenia. Ak chcete používať MySQL , otvorte súbor .env a upravte riadok:

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

Vytvorenie databázy:

php bin/console doctrine:database:create

Ak všetko prebehlo úspešne, databáza bola vytvorená a môžete začať s tvorbou tabuliek.

2. Vytvorenie entity v Doctrine

Entity v Doctrine sú triedy, ktoré reprezentujú tabuľky v databáze. Každý stĺpec v tabuľke zodpovedá jednému atribútu v entite.

Prí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(type: 'string', length: 100)]
    private string $name;

    #[ORM\Column(type: 'decimal', precision: 10, scale: 2)]
    private float $price;

    // Gettery a settery
}
?>

Vytvorenie databázovej tabuľky z entity:

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

Tento príkaz automaticky vygeneruje SQL dotazy na vytvorenie tabuľky products.

3. CRUD operácie v Doctrine

Vloženie nového produktu do databázy:

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

$entityManager->persist($product);
$entityManager->flush();
?>

Načítanie údajov z databázy:

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

Úprava existujúceho produktu:

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

Vymazanie produktu:

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

4. Použitie Doctrine Repository

Ak chcete pracovať s vlastnými dotazmi, môžete vytvoriť vlastný repository súbor.

<?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žitie repository v kontroléri:

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

Najčastejšie otázky

1. Ako môžem aktualizovať databázové schémy?

Použite príkazy:

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

2. Ako môžem pracovať s viacerými databázami?

Stačí nakonfigurovať viaceré pripojenia v doctrine.yaml a použiť parameter connection.

3. Ako získať všetky entity z tabuľky?

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

Top 5 zaujímavých faktov o Doctrine ORM

  1. Doctrine umožňuje automatické migrácie bez nutnosti manuálnych SQL dotazov.
  2. Podporuje viaceré databázové systémy, ako MySQL, PostgreSQL či SQLite.
  3. Používa Lazy Loading, čo znamená, že dáta sa načítajú len vtedy, keď sú potrebné.
  4. Doctrine podporuje prácu s entitami vo forme UUID, čím sa zvyšuje bezpečnosť.
  5. Mnohé veľké projekty (napr. Laravel) sú inšpirované Doctrine ORM a používajú jeho princípy.

Chcete sa naučiť Symfony a Doctrine do hĺbky?

Ak máte záujem o prezenčné alebo online školenie programovania v PHP, pozrite si našu ponuku na www.like-it.sk. Naše kurzy vedú skúsení odborníci, ktorí vám pomôžu zvládnuť Symfony od základov až po pokročilé koncepty.

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí.

Stiahnite so náš ebook teraz výnimočne zdarma!!!

Marián Knězek

 

Súvisiace články: