Model

Wat is een model?

Een model is een object die gerelateerd is aan een database tabel.
Voorbeeld model User (let op naam is in enkelvoud en met hoofdletter) heeft in de database de tabel 'users'

Omdat we met models object georienteerd programmeren is het mogelijk om overerving te gebruiken. Elke model moet kunnen worden aangemaakt, opgeslagen, gewijzigd etc.
Dit kunnen we één keer doen in een Model class. Deze Model class kunnen we als blauwdruk voor onze User model of Bericht model gebruiken.

Aanmaken van een Model

Het is netjes om al je Models in een directory 'models' te zetten. Dit is overzichtelijk, maar niet noodzakelijk.

Een voorbeeld van een user Model

<?php

class User extends Model
{
    protected $table = "users";
}

Je ziet dat er 'extends Model' achter staat. Dat neemt alle eigenschappen van Model over.

Omdat je alle bestanden moet kunnen gebruiken. Moet je deze wel allemaal toevoegen aan je index.php onder de require van Database.php.

require "Model.php";
require "models/User.php";
require "models/Post.php";

Model voor queries

Je kan met je Model queries bouwen. Hieronder een voorbeeldje

//query op users tabel
$users = (new User)
    ->where('voornaam', 'LIKE', '%p%') //voornaam LIKE '%p%'
    ->where('role', 'user') // role = 'user'
    ->whereNull('tussenvoegsel') // tussenvoegsel IS NULL
    ->get(); //uitvoeren van de query
dd($users);

Deze query builder heeft op de achtergrond uiteraard een protectie tegen SQL-injecties

Niet alle resultaten ophalen (limit)

$users = (new User)
    ->limit(3)
    ->get();

Zal maximaal 3 users tonen.

Alle users ophalen

$users = (new User)->all();
dd($users);

De eerste gevonden user ophalen

$user = (new User)->first();
dd($user);

User aanmaken

//aanmaken van een user
$user = (new User)->create([
    'name' => 'Piet Puck',
    'email' => 'testttw@mail.nl',
    'password' => password_hash('password', PASSWORD_BCRYPT)
]);
dd($user);

Zoeken van een user op id

//zoeken van een user op id
$user = (new User)->find(2);
dd($user);

Gegevens van een opgehaalde user tonen

$user = (new User)->find(2);
//voornaam van de gebruiker op het scherm schrijven
echo $user->voornaam;

Gegevens van een user aanpassen

$user = (new User)->find(2);

//naam wijzigen
$user->name = 'John Doe';

//opslaan in database (alleen als er werkelijk iets gewijzigd is)
$user->save();

of

$user = (new User)->find(1);
$user->update([
    'name' => 'Nieuwe naam'
]);

User verwijderen

//user met id=6 ophalen
$user = (new User)->find(6);
//de zojuist opgehaalde user verwijderen uit de database
$user->delete();

Zelf eigenschappen toevoegen

Bij een User zullen we vaak de volledige naam op het scherm willen tonen. We kunnen hier een methode toevoegen aan User.php

<?php

class User extends Model
{
    protected $table = "users";
    
    public function name(){
        return $this->voornaam." ".
            $this->tussenvoegsel." ".
            $this->achternaam;
    }
}

Let op dat er voor bovenstaande code wel velden in de database moeten bestaan met de namen 'voornaam', 'tussenvoegsel' en 'achternaam' deze velden zijn in onze default database niet aanwezig. De code zal dan ook fouten opleveren bij aanroep.

Nu kun je in je code een user selecteren en snel de naam op het scherm schrijven

$user = (new User)->find(4);
echo $user->name();

Debuggen

Soms wil je graag even zien welke queries er allemaal worden uitgevoerd. Dat kan door de dumpQuerLog() methode te gebruiken. Dit zal alle uitvoerde queries op het scherm schrijven en het script verder afbreken.

$user = (new User)->find(2);
//uitgevoerde queries bekijken
$user->dumpQueryLog();