Eloquent ['eləkwənt]
, die Methode des Datenbankabfragekonstruktors wird auch für die Modellklasse verwendet, der Teil DB::table
(„Tabellenname“) wird jedoch weggelassen.
Verwenden Sie die geschützte Mitgliedsvariable $table im Modell, um den Namen der gebundenen Tabelle anzugeben.
<?php namespace App; use Illuminate\Database\Eloquent\Model;class Flight extends Model{ /** * The table associated with the model. * * @var string */ protected $table = 'my_flights'; }
Eloquent
Angenommen, dass jede Tabelle einen Primärschlüssel mit dem Namen id hat. Dieser Feldname kann durch die Mitgliedsvariable $primaryKey
überschrieben werden. Außerdem geht Eloquent
davon aus, dass das Primärschlüsselfeld ist eine inkrementierende Ganzzahl. Wenn Sie einen nicht inkrementierenden Primärschlüssel oder einen nicht numerischen Primärschlüssel verwenden möchten, müssen Sie das public
-Attribut $incrementing
im Modell als false
angeben.
Standardmäßig erwartet Eloquent
, dass zwei Felder created_at
und updated_at
in der Tabelle vorhanden sind, und der Feldtyp ist timestamp
. Wenn Sie diese beiden Felder nicht möchten, setzen Sie $timestamps
auf false
<?php namespace App; use Illuminate\Database\Eloquent\Model;class Flight extends Model{ /** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false; /** * The storage format of the model's date columns. * * @var string */ protected $dateFormat = 'U'; }
Verwenden Sie protected $connection = 'connection-name', um die vom Modell verwendete Datenbankverbindung anzugeben.
Grundlegende Abfrageoperationen# Die
Methode all wird verwendet, um alle Ergebnisse in der Modelltabelle zurückzugeben
$flights = Flight::all();foreach ($flights as $flight) { echo $flight->name; }
Sie können auch die get
verwenden Methode zum Abfragen der Ergebnisse Einschränkungen hinzufügen
$flights = App\Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get();
Sie sehen, dass die Abfragekonstruktormethode auch für Modellklassen verwendet werden kann
In eloquentem ORM die Methoden get
und all
Fragen Sie mehrere Ergebnismengen ab. Ihr Rückgabewert ist ein IlluminateDatabaseEloquentCollection
-Objekt, das verschiedene Methoden zum Bearbeiten der Ergebnismenge bereitstellt.
public function find($key, $default = null); public function contains($key, $value = null); public function modelKeys(); public function diff($items)...
Es gibt viele Methoden für dieses Objekt, nur ein kleiner Teil wird aufgelistet Weitere Methoden finden Sie in der API-Dokumentation. Dokumentation zur Sammlung und Verwendung. Für die segmentierte Verarbeitung einer großen Anzahl von Ergebnissen wird auch die Chunk-Methode
Flight::chunk(200, function ($flights) { foreach ($flights as $flight) { // } });
und die Methoden find
und first
zur Abfrage verwendet Es wird ein einzelnes Ergebnis und eine einzelne Modellinstanz zurückgegeben
// 通过主键查询模型...$flight = App\Flight::find(1); // 使用约束...$flight = App\Flight::where('active', 1)->first();
Mit der find
-Methode können auch mehrere Ergebnisse in Form eines Collection
-Objekts zurückgegeben werden, und die Parameter sind mehrere Primärschlüssel
$flights = App\Flight::find([1, 2, 3]);
Wenn keine Ergebnisse gefunden werden können, können Sie die Methode findOrFail
oder firstOrFail
verwenden. Diese beiden Methoden lösen eine IlluminateDatabaseEloquentModelNotFound<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>
-Ausnahme aus, wenn keine Ergebnisse gefunden werden
$model = App\Flight::findOrFail(1);$model = App\Flight::where('legs', '>', 100)->firstOrFail();
Wenn diese Ausnahme nicht abgefangen wird, kehrt Laravel automatisch zurück. Geben Sie dem Benutzer ein 404-Antwortergebnis. Wenn Sie also 404 zurückgeben möchten, wenn es nicht gefunden wird, können Sie diese Methode direkt verwenden, um
Route::get('/api/flights/{id}', function ($id) { return App\Flight::findOrFail($id); });
Wie bei der Abfragemethode des Abfrage-Generators können Sie Aggregatfunktionen verwenden, um Ergebnisse zurückzugeben, allgemeine Ergebnisse wie Max, Min, Durchschnitt, Summe, Anzahl usw.
$count = App\Flight::where('active', 1)->count();$max = App\Flight::where('active', 1)->max('price');
Seitenabfrage kann die Paginierungsfunktion direkt verwenden
LengthAwarePaginator paginate( int $perPage = null, array $columns = array('*'), string $pageName = 'page', int|null $page = null)
Parameterbeschreibung
Parametertypbeschreibung
perPage int Anzeigemenge pro Seite
columns array Abfragespaltenname
pageName string Seitenzahl-Parametername
page int Aktuelle Seitennummer
Der Rückgabewert ist das LengthAwarePaginator
-Objekt.
$limit = 20;$page = 1;return Enterprise::paginate($limit, ['*'], 'page', $page);
Grundlegende Einfügevorgänge #
Das Einfügen neuer Daten erfordert lediglich das Erstellen einer neuen Modellinstanz, das anschließende Festlegen der Modellattribute und schließlich das Aufrufen der Speichermethode.
$flight = new Flight;$flight->name = $request->name;$flight->save();
Beim Aufrufen der Speichermethode werden Zeitstempel automatisch für die Felder „created_at“ und „update_at“ festgelegt. Es ist nicht erforderlich,
Batch-Zuweisungseinfügungsnummer
manuell anzugeben Mit der Methode create
können Sie einen Einfügevorgang zum stapelweisen Zuweisen von Werten zu Modellattributen durchführen. Bevor Sie die Methode create
ausführen, müssen Sie fillable
und <🎜 angeben > Attribute im Modell, um eine illegale Attributzuweisung zu verhindern (um beispielsweise zu verhindern, dass das vom Benutzer übergebene guarded
-Attribut versehentlich in die Datentabelle eingegeben wird). is_admin
-Attributs besteht darin, dass das durch dieses Attribut angegebene Feld über die $fillable
-Methode eingefügt werden kann und andere Felder ähnlich einer Whitelist herausgefiltert werden, während create
ist das Gegenteil, ähnlich einer Blacklist-Liste. $guarded
protected $fillable = ['name'];// ORprotected $guarded = ['price'];
$flight = App\Flight::create(['name' => 'Flight 10']);
wird verwendet, um den Datensatz firstOrCreate
mithilfe des angegebenen Spaltenwertepaars abzufragen und einen neuen einzufügen, wenn er nicht gefunden werden kann. ähnelt fristOrNew
, außer dass es ein neues Modellobjekt zurückgibt, wenn es nicht vorhanden ist. Das Modell wird jedoch nicht beibehalten und muss manuell aufgerufen werden, um das Modellobjekt zu speichern, das in der Datenbank beibehalten werden soll . firstOrCreate
// 使用属性检索flight,如果不存在则创建...$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']); // 使用属性检索flight,如果不存在则创建一个模型实例...$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);
$flight = App\Flight::find(1);$flight->name = 'New Flight Name';$flight->save();
也可使用update方法对多个结果进行更新
App\Flight::where('active', 1) ->where('destination', 'San Diego') ->update(['delayed' => 1]);
基本删除操作#
使用delete
方法删除模型
$flight = App\Flight::find(1);$flight->delete();
上述方法需要先查询出模型对象,然后再删除,也可以直接使用主键删除模型而不查询,使用destroy方法
App\Flight::destroy(1);App\Flight::destroy([1, 2, 3]);App\Flight::destroy(1, 2, 3);
使用约束条件删除,返回删除的行数
$deletedRows = App\Flight::where('active', 0)->delete();
软删除是在表中增加deleted_at字段,当删除记录的时候不会真实删除记录,而是设置该字段的时间戳,由Eloquent模型屏蔽已经设置该字段的数据。
要启用软删除,可以在模型中引用Illuminate\Database\Eloquent\SoftDeletes这个Trait,并且在dates属性中增加deleted_at字段。
<?phpnamespace App;use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes;class Flight extends Model{ use SoftDeletes; /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = ['deleted_at']; }
要判断一个模型是否被软删除了的话,可以使用trashed方法
if ($flight->trashed()) { //}
查询软删除的模型#
包含软删除的模型#
如果模型被软删除了,普通查询是不会查询到该结果的,可以使用withTrashed方法强制返回软删除的结果
$flights = App\Flight::withTrashed() ->where('account_id', 1) ->get();// 关联操作中也可以使用 $flight->history()->withTrashed()->get();
只查询软删除的模型#
$flights = App\Flight::onlyTrashed() ->where('airline_id', 1) ->get();
还原软删除的模型#
查询到软删除的模型实例之后,调用restore方法还原
$flight->restore();
也可以在查询中使用
App\Flight::withTrashed() ->where('airline_id', 1) ->restore();// 关联操作中也可以使用 $flight->history()->restore();
强制删除(持久化删除)#
// Force deleting a single model instance...$flight->forceDelete(); // Force deleting all related models...$flight->history()->forceDelete();
上述操作后,数据会被真实删除。
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Laravel-Frameworks zu den grundlegenden Teilen von EloquentORM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!