Szukaj…
Robienie modelu
Tworzenie modelu
Klasy modeli muszą rozszerzać Illuminate\Database\Eloquent\Model
. Domyślną lokalizacją modeli jest katalog /app
.
Klasę modelu można łatwo wygenerować za pomocą polecenia Rzemieślnik :
php artisan make:model [ModelName]
Spowoduje to utworzenie nowego pliku PHP w app/
, który nazywa się [ModelName].php
, i będzie zawierał cały szablon dla nowego modelu, który obejmuje klasę, przestrzeń nazw i sposób użycia wymagany do podstawowej konfiguracji.
Jeśli chcesz utworzyć plik migracji wraz ze swoim modelem, użyj następującego polecenia, gdzie -m
wygeneruje również plik migracji:
php artisan make:model [ModelName] -m
Oprócz tworzenia modelu tworzy to migrację bazy danych, która jest podłączona do modelu. Plik PHP do migracji bazy danych znajduje się domyślnie w database/migrations/
. Nie obejmuje to - domyślnie - niczego poza kolumnami id i created_at
/ updated_at
, więc trzeba będzie edytować plik, aby zapewnić dodatkowe kolumny.
Zauważ, że będziesz musiał uruchomić migrację (po skonfigurowaniu pliku migracji), aby model mógł zacząć działać przy użyciu php artisan migrate
z katalogu głównego projektu
Ponadto, jeśli chcesz dodać migrację później, po wykonaniu modelu możesz to zrobić, uruchamiając:
php artisan make:migration [migration name]
Powiedzmy na przykład, że chcesz stworzyć model dla swoich kotów, masz dwie możliwości, aby utworzyć z lub bez migracji. Zdecydowałbyś się utworzyć bez migracji, jeśli masz już stolik dla kotów lub nie chcesz go teraz tworzyć.
W tym przykładzie chcemy utworzyć migrację, ponieważ nie mamy jeszcze tabeli, więc uruchomilibyśmy następujące polecenie.
php artisan make:model Cat -m
To polecenie utworzy dwa pliki:
- W folderze App:
app/Cat.php
- W folderze bazy danych:
database/migrations/timestamp_creat_cats_table.php
Plik, który nas interesuje, jest tym ostatnim, ponieważ to on może decydować o tym, jak chcemy wyglądać i dołączać tabelę. W przypadku każdej predefiniowanej migracji otrzymujemy kolumnę identyfikatora automatycznego zwiększania i kolumny znaczników czasu.
Poniższy przykład fragmentu pliku migracji zawiera powyższe predefiniowane kolumny, a także dodanie imienia kota, wieku i koloru:
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
});
}
Jak widać, stosunkowo łatwo jest stworzyć model i przeprowadzić migrację tabeli. Następnie, aby przeprowadzić migrację i utworzyć ją w bazie danych, uruchom następującą komendę:
php artisan migrate
Który spowoduje migrację wszelkich zaległych migracji do bazy danych.
Lokalizacja pliku modelu
Modele można przechowywać w dowolnym miejscu dzięki PSR4 .
Domyślnie modele są tworzone w katalogu app
z przestrzenią nazw App
. W przypadku bardziej złożonych aplikacji zwykle zaleca się przechowywanie modeli w ich własnych folderach w strukturze, która ma sens dla architektury aplikacji.
Na przykład, jeśli masz aplikację, która używała serii owoców jako modeli, możesz utworzyć folder o nazwie app/Fruits
aw tym folderze utworzysz Banana.php
(zachowując konwencję nazewnictwa StudlyCase ), możesz następnie utworzyć klasę Banana w przestrzeni nazw App\Fruits
:
namespace App\Fruits;
use Illuminate\Database\Eloquent\Model;
class Banana extends Model {
// Implementation of "Banana" omitted
}
Konfiguracja modelu
Eloquent stosuje podejście „konwencji nad konfiguracją”. Po rozszerzeniu podstawowej klasy Model
wszystkie modele dziedziczą właściwości wymienione poniżej. O ile nie zostanie to zastąpione, obowiązują następujące wartości domyślne:
własność | Opis | Domyślna |
---|---|---|
protected $connection | Nazwa połączenia DB | Domyślne połączenie DB |
protected $table | Nazwa tabeli | Domyślnie nazwa klasy jest konwertowana na snake_case i pluralizowana. Na przykład SpecialPerson staje się special_people |
protected $primaryKey | Tabela PK | id |
public $incrementing | Wskazuje, czy identyfikatory są automatycznie zwiększane | true |
public $timestamps | Wskazuje, czy model powinien być oznaczony znacznikiem czasu | true |
const CREATED_AT | Nazwa kolumny znacznika czasu utworzenia | created_at |
const UPDATED_AT | Nazwa kolumny znacznika czasu modyfikacji | updated_at |
protected $dates | Atrybuty, które powinny zostać zmutowane na DateTime, oprócz atrybutów znaczników czasu | [] |
protected $dateFormat | Format, w którym atrybuty daty zostaną zachowane | Domyślny dla bieżącego dialektu SQL. |
protected $with | Relacje do chętnego ładowania z modelem | [] |
protected $hidden | Atrybuty pominięte w serializacji modelu | [] |
protected $visible | Atrybuty dozwolone w serializacji modelu | [] |
protected $appends | Dodano akcesoria atrybutów do serializacji modelu | [] |
protected $fillable | Atrybuty, które można przypisać masowo | [] |
protected $guarded | Atrybuty znajdujące się na czarnej liście od przypisania masy | [*] (Wszystkie atrybuty) |
protected $touches | Relacje, które należy dotknąć, zapisz | [] |
protected $perPage | Liczba modeli, które należy zwrócić do stronicowania. | 15 |
własność | Opis | Domyślna |
---|---|---|
protected $casts | Atrybuty, które należy rzutować na typy rodzime | [] |
Zaktualizuj istniejący model
$user = User::find(1);
$user->name = 'abc';
$user->save();
Możesz także zaktualizować wiele atrybutów jednocześnie za pomocą update
, co nie wymaga późniejszego użycia opcji save
:
$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz']);
Możesz także zaktualizować model (y) bez uprzedniego zapytania:
User::where('id', '>', 2)->update(['location' => 'xyz']);
Jeśli nie chcesz wywoływać zmiany w sygnaturze czasowej updated_at
w modelu, możesz przekazać opcję touch
:
$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz'], ['touch' => false]);