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