Kako napraviti svoju prvu web stranicu sa PHP frameworkom Laravel – Part 4 (Models)

Evo nas u novom blog postu naziva ‘Kako napraviti svoju prvu web stranicu’, part 4.

U današnjem blog postu naučit ćemo kako se spojit na bazu podataka, kako pomoću laravela kreirati tablice i ono najvažnije, kako prikazati podatke iz tablice na našoj web stranici.

Ovaj blog post ćemo pokušati podijeliti na više sekcija  jer će biti opet dugačak, a želio bih vam što bolje i detaljnije opisati kako funkcionira sljedeće: migrations i moduls.

Kreiranje tablica

S obzirom da smo u prvom blog postu povezali našu stranicu sa bazom, na red je došlo da je popunimo sa tablicama.

Trebat će nam 3 tablice:

  • users – tablica od korisnika web stranice. Sadržava username, password, email i još neke sitnice.
  • albums – tablica koja će sadržavati naše albume, a zasad samo naziv albuma i žanr.
  • songs – tablica koja će sadržavati pjesme koje će pripadati određenom albumu, a sadržavati će ime pjesme, ime autora i dužinu trajanja
Kreiranje tablica za korisnike i kreiranje izgleda za prijavu i registraciju

Idemo prvo na users. Ono što je super kod laravela je to da on već ima cijeli sustav razrađen za korisnike, tako da nećete morati brinuti kako napraviti sustav za prijavu, registriranje, izgubljenu lozinku itd., pa idemo riješiti prvo to.

Kucajte naredbu u konzolu/terminal:

php artisan make:auth

Ova navedena naredba radi slijedeće:

  • kreira “migration” za users tablicu
  • kreira default layout temu naziva app.blade.php – sadržava bootstrap i linkove za login i register
  • kreira auth folder gdje drži izglede za login, register, i password recovery
Šta je to migration?

Migration je fajl koji se nalazi u database -> migrations folderu. Taj fajl sadrži shemu kako treba izgledati tablica koju ćemo kreirati. Ako otvorite 2014_10_12_000000_create_users_table.php vidjet ćete sljedeći kod:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

Migracijski fajlovi sadrže dvije funkcije. Prva funkcija “up” sadržava shemu kako će izgledati vaša tablica users, a druga funkcija “down” briše tablicu.

Više o tome što je incroments, strings i kako šta funkcionira možete saznati na službenoj stranici laravela u dokumentaciji.

Idemo kreirati druga 2 migracijska fajla za albume i pjesme – kucajte naredbe jednu po jednu:

php artisan make:migration create_songs_table --create=songs
php artisan make:migration create_albums_table --create=albums

Navedene naredbe će vam kreirati 2 migracijska fajla u database ->migrations folderu

Otvorite create_albums_table.php fajl i unutar shema::create funkcije stavite ovaj kod:

$table->increments('id');
$table->string('album_name'); //naziv albuma
$table->string('artist_name'); //naziv autora albuma
$table->decimal('song_duration', 4, 2); //trajanje pjesme
$table->timestamps();

Isto tako za create_songs_table.php fajl

$table->increments('id');
$table->string('name'); //naziv pjesme
$table->integer('album_id'); //id albuma
$table->timestamps();

Snimite oba fajla i ukucajte u konzolu/terminal naredbu:

php artisan migrate

Ova naredba će vam kreirati tablice u bazi podataka po shemi koju ste definirali u migracijama.

Migracije su jako korisne pogotovo kada radi više ljudi na jednom projektu pa mogu vidjeti točno tok kreiranja tablica, što se i gdje mijenjalo na njima.

Ako je sve dobro prošlo, sada imamo 3 tablice kreirane u bazi podataka i vrijeme je da ih povežemo sa našom web stranicom pomoću modela.

Ukoliko javi grešku da se ne može spojit na bazu podataka, tada ukucajte u konzolu/terminal ovu naredbu (koja će osvježiti config fajl kojeg smo u prvom tutorijalu uredili)

php artisan config:clear

Ako i dalje imate problem, otvorite AppServiceProvider.php koji se nalazi u app/Providers folderu, unutar boot()funkcije trebate dodat Schema::defaultStringLength(191);

I prije pozivanja klase stavite ovaj kod:

use Illuminate\Support\Facades\Schema;

Sada kucajte php artisan migrate:fresh.  Dodali smo :fresh iz razloga ako ste imali neku grešku prilikom kreiranja tablica pa je pola tablica kreirao a pola nije,  pomoću fresh naredbe ćemo obrisati sve dosad kreirane tablice i ponovo stvoriti nove.

Modeli

Kao što smo ranije spomenuli, Modele koristimo za povezivanje web stranice sa bazom podataka i za manipulaciju podataka koje dobivamo ili spremamo u našu bazu podataka.

Komanda za kreiranje modula je jako jednostavna:

php artisan make:model Album 
php artisan make:model Song

Ukucajte te dvije naredbe u konzolu i dobit ćete 2 modela: Album i Song, a User model je kreirao Laravel sam.

Naziv modela mora biti isti kao naziv tablice koju smo kreirali u migracijama, samo u jednini. Imali smo create_albums_table migraciju, a modul će nam se zvati Album (bez s) i veliko početno slovo jer laravel automatski prepoznaje nazive i veže ih za tablice.

Vađenje svih albuma iz baze (index)

Sada kada smo napokon kreirali module i migracije s kojima smo kreirali tablice u bazi podataka vrijeme je da krenemo vaditi podatke iz baze i prikazivati ih u aplikaciji:

  • u AlbumController.php idite do index funkcije.
  • index funkcija će vaditi sve podatke iz tablice albumi kao objekt
  • kad dobijemo objekt sa listom albuma istog ćemo proslijediti sa izgledom korisniku
  • idemo malo prepraviti našu index funkciju:
public function index()
    {
        $albums = Album::all();
        return view(sites.albumi.index, compact('albums'));
    }
  • Prvi red koda unutar funkcije je naša varijabla $albums koja će sadržavati listu albuma.
  • U nastavku koda kaže da je ona jednaka našem modulu Album kojeg smo kreirali da se povežemo sa tablicom albumi.
  • I, ono najbitnije sa duplom dvotočkom ::all() poziva se funkcija koja nam vadi sve albume koji se nalaze u našoj tablici.
  • Return je klasično vraćanje korisniku izgleda koji se nalazi u folderu sites -> albumi -> index.blade.php i u compact helperu smo dodali samo listu albuma $albums.

Prikaz svih albuma

Vrijeme je da otvorimo taj index.blade.php u folderu resource -> sites -> albums  i da stavimo kod koji će prikazivati albume.

@extends('layouts.master')
@section('content')
    <h1>Svi Albumi</h1>
    <ul>
    @foreach($albums as $album)
        <li>
            <a>{{ $album->album_name }}</a>
        </li>
    @endforeach
@endsection
  • Ovdje imamo petlju koja prolazi kroz objekt $albums i ispisuje nam listu albuma, tj. naziv albuma kao linkove.
  • S obzirom da još nemamo niti jedan album kreiran u našoj tablici, dobit ćete prazan ekran s h1 tagom Svi albumi
  • Doraditi ćemo kod da provjeri postoje li albumi u tablici albumi, ako ne neka nam laravel prikaže poruku da nema niti jednog albuma u bazi.
@extends('layouts.master')
@section('content')
    <h1>Svi Albumi</h1>
    <ul>
    @if(empty($albums))
        <div>Ne postoji trenutno niti jedan album u našoj bazi podataka!</div>
    @else
        @foreach($albums as $album)
            <li>
                <a>{{ $album->album_name }}</a>
            </li>
        @endforeach
    @endif
@endsection
  • Sada kada osvježite stranicu albumi, dobit ćete poruku da ne postoji niti jedan album u našoj bazi podataka!
  • Vrlo jednostavan kod provjerava postoji li u objektu $albums albumi, ako ne – javlja poruku, ako da – onda prikazuje listu sa nazivima albuma.
  • Kada budemo u sljedećem tutorijalu radili unose u bazu ovdje će nam se pojaviti lista naziva albuma koje budemo unosili u našu bazu podataka.

To bi bilo to za ovaj tutorijal. U novom blog postu ćemo zajedno učiti kako napraviti da sve ostale funkcije koje su nam ostale u AlbumsController.php, imaju svoju funkciju (kreiranje albuma, prikaz pojedinog albuma, editiranje albuma, spremanje izmjena na albumu i brisanje albuma).

Slobodno šerajte post, bacite komentar, pitajte što vas zanima…. tu smo da pomognemo.

Uskoro ćemo otvoriti našu mail listu gdje ćete se moći prijaviti, te tako pratit nove postove i isto tako dobijati bonus materijale za laravel.

Povezani Članci

Odgovori

Vaša adresa e-pošte neće biti objavljena. Obavezna polja su označena sa *