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:

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow