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:
- I App-mappen:
app/Cat.php
- 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 |
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]);