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.
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";
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
$users = (new User) ->limit(3) ->get();
Zal maximaal 3 users tonen.
$users = (new User)->all(); dd($users);
$user = (new User)->first(); dd($user);
//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 $user = (new User)->find(2); dd($user);
$user = (new User)->find(2); //voornaam van de gebruiker op het scherm schrijven echo $user->voornaam;
$user = (new User)->find(2); //naam wijzigen $user->name = 'John Doe'; //opslaan in database (alleen als er werkelijk iets gewijzigd is) $user->save();
$user = (new User)->find(1); $user->update([ 'name' => 'Nieuwe naam' ]);
//user met id=6 ophalen $user = (new User)->find(6); //de zojuist opgehaalde user verwijderen uit de database $user->delete();
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();
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();