Sök…


Att göra en modell

Modell skapande

Modellklasser måste utvidga Illuminate\Database\Eloquent\Model . Standardplatsen för modeller är /app katalogen.

En modellklass kan enkelt genereras av kommandot Artisan :

php artisan make:model [ModelName]

Detta skapar en ny PHP-fil i app/ standard, med namnet [ModelName].php , och kommer att innehålla hela pannplattan för din nya modell, som innehåller klass, namnutrymme och användning som krävs för en grundläggande installation.

Om du vill skapa en migreringsfil tillsammans med din modell använder du följande kommando, där -m också genererar migreringsfilen:

php artisan make:model [ModelName] -m

Förutom att skapa modellen skapar detta en databasmigrering som är ansluten till modellen. Databasmigrations PHP-filen finns som standard i database/migrations/ . Detta inkluderar inte som standard något annat än kolumnerna id och created_at / updated_at , så du måste redigera filen för att tillhandahålla ytterligare kolumner.

Observera att du måste köra migreringen (när du har ställt in migreringsfilen) för att modellen ska börja fungera genom att använda php artisan migrate från projektrot

Om du vill lägga till en migrering senare, efter att du har gjort modellen, kan du göra det genom att köra:

php artisan make:migration [migration name]

Säg till exempel att du ville skapa en modell för dina katter, du skulle ha två val, att skapa med eller utan migrering. Du valde att skapa utan migrering om du redan hade ett kattbord eller inte vill skapa ett just nu.

För det här exemplet vill vi skapa en migrering eftersom vi inte redan har en tabell så att köra följande kommando.

php artisan make:model Cat -m

Detta kommando skapar två filer:

  1. I App-mappen: app/Cat.php
  2. I databasmappen: database/migrations/timestamp_creat_cats_table.php

Filen vi är intresserad av är den senare eftersom det är den här filen som vi kan bestämma hur vi vill att tabellen ska se ut och inkludera. För varje fördefinierad migrering får vi en automatisk inkrementering av id-kolumnen och en kolumn med tidsstämplar.

Nedanstående exempel på ett extrakt av migreringsfilen inkluderar ovan fördefinierade kolumner samt tillägg av ett kattnamn, ålder och färg:

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

        });
    }

Så som ni ser är det relativt enkelt att skapa en modell och migrering för en tabell. För att utföra migreringen och skapa den i din databas kör du följande kommando:

php artisan migrate

Vilket migrerar alla utestående migrationer till din databas.


Model File Location

Modeller kan lagras var som helst tack vare PSR4 .

Som standard skapas modeller i app med namnområdet för App . För mer komplexa applikationer rekommenderas det vanligtvis att lagra modeller i sina egna mappar i en struktur som är vettig för din apps arkitektur.

Om du till exempel hade ett program som använde en serie frukter som modeller, kan du skapa en mapp som heter app/Fruits och inom den här mappen skapar du Banana.php (håller namnet på StudlyCase- namnet), kan du skapa Banana-klassen i App\Fruits :

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

class Banana extends Model {
    // Implementation of "Banana" omitted
}

Modellkonfiguration

Eloquent följer en "konvention över konfiguration" -strategi. Genom att utvidga basen Model klassen, alla modeller ärver egenskaper som anges nedan. Följande standardvärden gäller om inte åsidosatt:

Fast egendom Beskrivning Standard
protected $connection DB-anslutningsnamn Standard DB-anslutning
protected $table Tabellnamn Som standard konverteras snake_case till snake_case och pluraliseras. Till exempel SpecialPerson blir special_people
protected $primaryKey Tabell PK id
public $incrementing Anger om ID: erna ökar automatiskt true
public $timestamps Anger om modellen ska tidsstämmas true
const CREATED_AT Namn på skapelsestidsstämpelkolumnen created_at
const UPDATED_AT Namnet på ändringens tidsstämpelkolumn updated_at
protected $dates Attribut som bör muteras till DateTime, utöver tidsstämplens attribut []
protected $dateFormat Format i vilket datumattribut kommer att bestå Standard för aktuell SQL-dialekt.
protected $with Förhållanden till ivrig belastning med modell []
protected $hidden Attribut utelämnas i modellserien []
protected $visible Attribut tillåtna i modellserien []
protected $appends Attributstillbehör tillagda i modellserien []
protected $fillable Attribut som kan masstilldelas []
protected $guarded Attribut som är svartlistade från masstilldelning [*] (Alla attribut)
protected $touches Förhållandena som bör beröras sparar []
protected $perPage Antalet modeller som ska returneras för pagination. 15
5,0
Fast egendom Beskrivning Standard
protected $casts Attribut som ska kastas till ursprungliga typer []

Uppdatera en befintlig modell

$user = User::find(1);
$user->name = 'abc';
$user->save();

Du kan också uppdatera flera attribut samtidigt med update , vilket inte kräver att du save efteråt:

$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz']);

Du kan också uppdatera en modell utan att fråga den i förväg:

User::where('id', '>', 2)->update(['location' => 'xyz']);

Om du inte vill utlösa en ändring av den updated_at tidsstämpeln på modellen kan du passera touch :

$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz'], ['touch' => false]);


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow