Zoeken…
Een model maken
Model creatie
Modelklassen moeten Illuminate\Database\Eloquent\Model
uitbreiden. De standaardlocatie voor modellen is de map /app
.
Een modelklasse kan eenvoudig worden gegenereerd met de Artisan- opdracht:
php artisan make:model [ModelName]
Dit maakt een nieuw PHP-bestand in app/
standaard, genaamd [ModelName].php
, en bevat alle boilerplate voor uw nieuwe model, inclusief de klasse, naamruimte en gebruik die nodig zijn voor een basisconfiguratie.
Als u samen met uw model een migratiebestand wilt maken, gebruikt u de volgende opdracht, waarbij -m
ook het migratiebestand genereert:
php artisan make:model [ModelName] -m
Naast het maken van het model, maakt dit een databasemigratie die is gekoppeld aan het model. Het database-migratie PHP-bestand bevindt zich standaard in database/migrations/
. Dit omvat standaard niet iets anders dan de kolommen id en created_at
/ updated_at
, dus u moet het bestand bewerken om extra kolommen te bieden.
Merk op dat je de migratie moet uitvoeren (nadat je het migratiebestand hebt ingesteld) om het model te laten werken met php artisan migrate
van project root
Als u later, na het maken van het model, een migratie wilt toevoegen, kunt u dit doen door:
php artisan make:migration [migration name]
Stel dat u bijvoorbeeld een model voor uw katten wilde maken, u zou twee keuzes hebben, te maken met of zonder een migratie. Je zou ervoor kiezen om te creëren zonder migratie als je al een kattentafel had of er op dit moment geen wilde maken.
Voor dit voorbeeld willen we een migratie maken omdat we nog geen tabel hebben en daarom de volgende opdracht uitvoeren.
php artisan make:model Cat -m
Met deze opdracht worden twee bestanden gemaakt:
- In de map App:
app/Cat.php
- In de databasemap:
database/migrations/timestamp_creat_cats_table.php
Het bestand waarin we geïnteresseerd zijn, is het laatste omdat het dit bestand is dat we kunnen beslissen hoe we de tabel eruit willen zien en opnemen. Voor elke vooraf gedefinieerde migratie krijgen we een automatisch oplopende id-kolom en een tijdstempelkolommen.
Het onderstaande voorbeeld van een extract van het migratiebestand bevat de bovenstaande vooraf gedefinieerde kolommen en de toevoeging van de naam van de kat, leeftijd en kleur:
public function up()
{
Schema::create('cats', function (Blueprint $table) {
$table->increments('id'); //Predefined ID
$table->string('name'); //Name
$table->integer('age'); //Age
$table->string('colour'); //Colour
$table->timestamps(); //Predefined Timestamps
});
}
Zoals u kunt zien, is het relatief eenvoudig om het model en de migratie voor een tabel te maken. Voer vervolgens de volgende opdracht uit om de migratie uit te voeren en in uw database te maken:
php artisan migrate
Welke uitstaande migraties naar uw database zal migreren.
Locatie van modelbestand
Modellen kunnen overal worden opgeslagen dankzij PSR4 .
Standaard worden modellen gemaakt in de app
map met de naamruimte van de App
. Voor complexere applicaties wordt het meestal aanbevolen om modellen in hun eigen mappen op te slaan in een structuur die logisch is voor uw app-architectuur.
Als u bijvoorbeeld een toepassing had die een reeks fruitsoorten als modellen gebruikte, zou u een map met de naam app/Fruits
en binnen deze map Banana.php
( volgens de naamgevingsconventie van StudlyCase ), kunt u vervolgens de Banana-klasse maken in de App\Fruits
naamruimte:
namespace App\Fruits;
use Illuminate\Database\Eloquent\Model;
class Banana extends Model {
// Implementation of "Banana" omitted
}
Model configuratie
Eloquent volgt een "conventie boven configuratie" -benadering. Door de uitbreiding van de basis Model
klasse, alle modellen erven de eigenschappen hieronder vermeld. Tenzij overschreven, zijn de volgende standaardwaarden van toepassing:
Eigendom | Beschrijving | Standaard |
---|---|---|
protected $connection | Naam DB-verbinding | Standaard DB-verbinding |
protected $table | Tafel naam | Standaard wordt de klassenaam geconverteerd naar snake_case en meervoudig. SpecialPerson wordt bijvoorbeeld special_people |
protected $primaryKey | Tabel PK | id |
public $incrementing | Geeft aan of de ID's automatisch worden verhoogd | true |
public $timestamps | Geeft aan of het model een tijdstempel moet hebben | true |
const CREATED_AT | Naam van de kolom met de tijdstempel van de creatie | created_at |
const UPDATED_AT | Naam van de kolom met de tijdstempel van de wijziging | updated_at |
protected $dates | Kenmerken die moeten worden gemuteerd naar DateTime, naast de kenmerken voor tijdstempels | [] |
protected $dateFormat | Formaat waarin datumkenmerken worden behouden | Standaard voor het huidige SQL-dialect. |
protected $with | Relaties om te downloaden met model | [] |
protected $hidden | Attributen weggelaten in modelserialisatie | [] |
protected $visible | Attributen toegestaan in modelserialisatie | [] |
protected $appends | Attribuut-accessors toegevoegd aan modelserialisatie | [] |
protected $fillable | Attributen die in massa kunnen worden toegewezen | [] |
protected $guarded | Attributen die op de zwarte lijst staan van massa-toewijzing | [*] (Alle attributen) |
protected $touches | De relaties die moeten worden aangeraakt, behouden | [] |
protected $perPage | Het aantal modellen dat moet worden geretourneerd voor paginering. | 15 |
Eigendom | Beschrijving | Standaard |
---|---|---|
protected $casts | Kenmerken die naar native typen moeten worden gegoten | [] |
Update een bestaand model
$user = User::find(1);
$user->name = 'abc';
$user->save();
U kunt ook meerdere attributen tegelijk update
met behulp van update
, waarvoor achteraf geen save
is:
$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz']);
U kunt ook een model (len) bijwerken zonder het vooraf te vragen:
User::where('id', '>', 2)->update(['location' => 'xyz']);
Als u geen wijziging in de updated_at
datumstempel op het model wilt activeren, kunt u de touch
doorgeven:
$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz'], ['touch' => false]);