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:

  1. In de map App: app/Cat.php
  2. 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
5.0
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]);


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow