Lekce 4: Databáze, modely a Eloquent ORM
Vítejte u čtvrté lekce, ve které se ponoříme do světa databází a nejvýkonnějšího nástroje v Laravelu – Eloquent ORM. Naučíte se, jak nastavit a spravovat databázi, definovat modely a provádět CRUD (Create, Read, Update, Delete) operace s elegantní syntaxí. Tato lekce je klíčová pro vývoj jakékoli dynamické webové aplikace. [Image of database schema]
Obsah lekce
- Nastavení DB v .env
- Vytvoření a spuštění migrace
- Definice modelu Product a Eloquent
- CRUD operace pomocí Eloquentu
- Vytvoření seederu a Factory
- Observers pro automatické akce
- Shrnutí
Nastavení DB v .env
Než začnete pracovat s databází, je nutné nastavit její připojení. Veškerá konfigurace se nachází v souboru .env v kořenovém adresáři vašeho projektu.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=moje_aplikace
DB_USERNAME=root
DB_PASSWORD=
Vytvoření a spuštění migrace
Migrace jsou jako "verze" vaší databáze. Umožňují vám definovat strukturu tabulek pomocí PHP kódu, což zjednodušuje týmovou spolupráci a nasazování na server.
Vytvoření migrace pro tabulku products:
php artisan make:migration create_products_table
Otevřete nově vytvořený soubor a definujte sloupce:
// database/migrations/..._create_products_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->decimal('price', 8, 2);
$table->text('description')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('products');
}
};
Spuštění migrace:
php artisan migrate
Definice modelu Product a Eloquent
Model je třída, která reprezentuje jednu databázovou tabulku a umožňuje s ní interagovat pomocí objektů. Díky Eloquent ORM můžete pracovat s tabulkami jako s objekty.
Vytvoření modelu Product:
php artisan make:model Product
Model se automaticky vytvoří v app/Models/Product.php.
CRUD operace pomocí Eloquentu
Eloquent výrazně zjednodušuje základní operace s daty.
Vytvoření (Create):
$product = Product::create([
'name' => 'Káva',
'price' => 120.50,
'description' => 'Výběrová káva z Brazílie'
]);
Čtení (Read):
$product = Product::find(1); // Najde produkt s ID 1
$products = Product::where('price', '>', 100)->get(); // Všechny produkty dražší než 100
Aktualizace (Update):
$product = Product::find(1);
$product->price = 150;
$product->save();
Smazání (Delete):
$product = Product::find(1);
$product->delete();
Vytvoření seederu a Factory
Pro naplnění databáze testovacími daty se používají seedery a Factory. Factory definují, jaká data se mají generovat, a seedery je pak vkládají do databáze.
Vytvoření seederu a factory:
php artisan make:seeder ProductSeeder
php artisan make:factory ProductFactory
Upravte ProductFactory pro generování dat.
// database/factories/ProductFactory.php
public function definition(): array
{
return [
'name' => $this->faker->words(2, true),
'price' => $this->faker->randomFloat(2, 50, 500),
'description' => $this->faker->paragraph,
];
}
Upravte ProductSeeder pro použití factory a naplnění databáze.
// database/seeders/ProductSeeder.php
use App\Models\Product;
use Illuminate\Database\Seeder;
class ProductSeeder extends Seeder
{
public function run(): void
{
Product::factory()->count(10)->create();
}
}
Naplnění DB testovacími daty:
php artisan db:seed --class=ProductSeeder
Observers pro automatické akce
Observers vám umožní provádět akce, když dojde ke změnám modelu, například při vytvoření, aktualizaci nebo smazání. Jsou to skvělé nástroje pro zachycení událostí a automatizaci procesů.
Vytvoření observeru pro model Product:
php artisan make:observer ProductObserver --model=Product
Příklad metody created v observeru:
// app/Observers/ProductObserver.php
public function created(Product $product): void
{
Log::info('Nový produkt byl vytvořen: ' . $product->name);
}
- Nezapomeňte zaregistrovat observer v
AppServiceProvider.
Shrnutí
Po této lekci žák umí nastavit databázi a vytvořit základní strukturu pro práci s daty. Rozumí tomu, jak vytvořit migrace pro definici tabulek a jak je spouštět. Zvládl základy Eloquentu, což mu umožňuje provádět všechny nezbytné CRUD operace s daty. Navíc zná seedery a factories pro efektivní generování testovacích dat a observers pro automatizaci akcí. 🎉
´