Suche…


Ein Modell erstellen

Modellerstellung

Modellklassen müssen Illuminate\Database\Eloquent\Model . Der Standardspeicherort für Modelle ist das Verzeichnis /app .

Eine Modellklasse kann leicht mit dem Artisan- Befehl generiert werden:

php artisan make:model [ModelName]

Dadurch wird standardmäßig eine neue PHP-Datei mit dem Namen [ModelName].php in app/ [ModelName].php enthält die gesamte Grundplatte für Ihr neues Modell, einschließlich der Klasse, des Namespaces und der Verwendung, die für eine grundlegende Einrichtung erforderlich sind.

Wenn Sie eine Migrationsdatei zusammen mit Ihrem Modell erstellen möchten, verwenden Sie den folgenden Befehl, wobei -m auch die Migrationsdatei generiert:

php artisan make:model [ModelName] -m

Neben dem Erstellen des Modells wird eine Datenbankmigration erstellt, die mit dem Modell verbunden ist. Die PHP-Datei für die Datenbankmigration befindet sich standardmäßig in der database/migrations/ . Dies schließt standardmäßig keine anderen created_at als die Spalten id und created_at / updated_at müssen Sie die Datei bearbeiten, um zusätzliche Spalten bereitzustellen.

Beachten Sie, dass Sie die Migration ausführen müssen (sobald Sie die Migrationsdatei eingerichtet haben), damit das Modell mithilfe von php artisan migrate vom Projektstamm aus

Wenn Sie später eine Migration hinzufügen möchten, nachdem Sie das Modell erstellt haben, können Sie Folgendes ausführen:

php artisan make:migration [migration name]

Angenommen, Sie möchten ein Modell für Ihre Katzen erstellen, Sie hätten zwei Möglichkeiten, sie mit oder ohne Migration zu erstellen. Sie würden sich für die Erstellung ohne Migration entscheiden, wenn Sie bereits über eine Katzentabelle verfügen oder zu diesem Zeitpunkt keine erstellen möchten.

Für dieses Beispiel möchten wir eine Migration erstellen, da wir noch keine Tabelle haben, also den folgenden Befehl ausführen.

php artisan make:model Cat -m

Dieser Befehl erstellt zwei Dateien:

  1. Im App-Ordner: app/Cat.php
  2. Im Datenbankordner: database/migrations/timestamp_creat_cats_table.php

Die Datei, an der wir interessiert sind, ist die letztere, da wir über diese Datei entscheiden können, wie die Tabelle aussehen und einschließen soll. Für jede vordefinierte Migration erhalten wir eine automatisch ansteigende ID-Spalte und eine Zeitstempel-Spalte.

Das nachstehende Beispiel eines Extrakts der Migrationsdatei enthält die oben definierten vordefinierten Spalten sowie die Hinzufügung eines Namens der Katze, des Alters und der Farbe:

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

        });
    }

Wie Sie sehen, ist es relativ einfach, das Modell und die Migration für eine Tabelle zu erstellen. Um die Migration auszuführen und in Ihrer Datenbank zu erstellen, führen Sie den folgenden Befehl aus:

php artisan migrate

Dadurch werden alle ausstehenden Migrationen in Ihre Datenbank migriert.


Speicherort der Modelldatei

Modelle können dank PSR4 überall gespeichert werden.

Standardmäßig werden Modelle im app Verzeichnis mit dem Namespace App . Für komplexere Anwendungen wird normalerweise empfohlen, Modelle in ihren eigenen Ordnern in einer Struktur zu speichern, die für Ihre Apps-Architektur sinnvoll ist.

Wenn Sie beispielsweise über eine Anwendung Banana.php , die eine Reihe von Früchten als Modelle verwendet, können Sie einen Ordner mit dem Namen app/Fruits erstellen. Banana.php diesem Ordner erstellen Sie Banana.php (unter Beachtung der Namenskonvention von StudlyCase ). Anschließend können Sie die Banana-Klasse erstellen im App\Fruits Namespace:

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

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

Modellkonfiguration

Eloquent verfolgt einen Ansatz der "Konvention über die Konfiguration". Durch die Erweiterung der Model alle Modelle erben die unten aufgeführten Eigenschaften. Wenn nicht überschrieben, gelten die folgenden Standardwerte:

Eigentum Beschreibung Standard
protected $connection DB-Verbindungsname Standard-DB-Verbindung
protected $table Tabellenname Standardmäßig wird der Klassenname in " snake_case konvertiert und in eine snake_case umgewandelt. Beispielsweise wird SpecialPerson zu special_people
protected $primaryKey Tabelle PK id
public $incrementing Gibt an, ob die IDs automatisch inkrementiert werden true
public $timestamps Gibt an, ob das Modell mit einem Zeitstempel versehen werden soll true
const CREATED_AT Name der Erstellungszeitstempel-Spalte created_at
const UPDATED_AT Name der Spalte für den Änderungszeitstempel updated_at
protected $dates Attribute, die zusätzlich zu den Zeitstempelattributen zu DateTime mutiert werden sollten []
protected $dateFormat Format, in dem Datumsattribute beibehalten werden Standard für den aktuellen SQL-Dialekt.
protected $with Beziehungen zur Modellarbeit []
protected $hidden Attribute wurden bei der Modellserialisierung weggelassen []
protected $visible In der Modell-Serialisierung zulässige Attribute []
protected $appends Attribut-Accessoren zur Modell-Serialisierung hinzugefügt []
protected $fillable Attribute, die massenzuweisbar sind []
protected $guarded Attribute, die bei der Massenzuordnung auf der schwarzen Liste stehen [*] (Alle Attribute)
protected $touches Die Beziehungen, die berührt werden sollten, werden gespeichert []
protected $perPage Die Anzahl der für die Paginierung zurückzugebenden Modelle. 15
5,0
Eigentum Beschreibung Standard
protected $casts Attribute, die in native Typen umgewandelt werden sollten []

Aktualisieren Sie ein vorhandenes Modell

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

Sie können auch mehrere Attribute gleichzeitig mit update , für das anschließend kein save erforderlich ist:

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

Sie können ein Modell auch aktualisieren, ohne es vorher abzufragen:

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

Wenn Sie keine Änderung an der Zeitmarke updated_at des Modells auslösen möchten, können Sie die touch :

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow