Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Laravel-Frameworks zu den grundlegenden Teilen von EloquentORM

Detaillierte Erläuterung des Laravel-Frameworks zu den grundlegenden Teilen von EloquentORM

黄舟
黄舟Original
2017-03-21 09:22:121672Durchsuche

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 = &#39;my_flights&#39;;
}

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&#39;s date columns.
     *
     * @var string
     */
    protected $dateFormat = &#39;U&#39;;
}

Verwenden Sie protected $connection = 'connection-name', um die vom Modell verwendete Datenbankverbindung anzugeben.

Abfrage

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(&#39;active&#39;, 1)
     ->orderBy(&#39;name&#39;, &#39;desc&#39;)
     ->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) {        //
    }
});

zur Abfrage eines einzelnen Ergebnisses

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(&#39;active&#39;, 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(&#39;legs&#39;, &#39;>&#39;, 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(&#39;/api/flights/{id}&#39;, function ($id) {
    return App\Flight::findOrFail($id);
});

zurückzugeben AbfrageaggregationFunktionErgebnis

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(&#39;active&#39;, 1)->count();$max = App\Flight::where(&#39;active&#39;, 1)->max(&#39;price&#39;);

Seitenabfrage

Seitenabfrage kann die Paginierungsfunktion direkt verwenden

LengthAwarePaginator paginate( 
    int $perPage = null, 
    array $columns = array(&#39;*&#39;), 
    string $pageName = &#39;page&#39;, 
    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, [&#39;*&#39;], &#39;page&#39;, $page);

Einfügen

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 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

Der Zweck der Angabe des

-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 = [&#39;name&#39;];// ORprotected $guarded = [&#39;price&#39;];
Beim Ausführen des Erstellungsvorgangs können nur Felder außerhalb der Whitelist oder Blacklist aktualisiert werden.

$flight = App\Flight::create([&#39;name&#39; => &#39;Flight 10&#39;]);
Zusätzlich zur Erstellungsmethode können zwei weitere Methoden verwendet werden : firstOrNew und firstOrCreate. Die Methode

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([&#39;name&#39; => &#39;Flight 10&#39;]);

// 使用属性检索flight,如果不存在则创建一个模型实例...$flight = App\Flight::firstOrNew([&#39;name&#39; => &#39;Flight 10&#39;]);
Aktualisieren

Grundlegender Aktualisierungsvorgang #

Methodenspeicherung kann nicht nur zum Einfügen neuer Daten, sondern auch zum Aktualisieren von Daten verwendet werden. Verwenden Sie einfach zuerst das Modell Die Methode fragt die zu aktualisierenden Daten ab, setzt die Modellattribute auf neue Werte und speichert sie dann zur Aktualisierung. Das Feld „update_at“ wird automatisch aktualisiert.

$flight = App\Flight::find(1);$flight->name = &#39;New Flight Name&#39;;$flight->save();

也可使用update方法对多个结果进行更新

App\Flight::where(&#39;active&#39;, 1)
    ->where(&#39;destination&#39;, &#39;San Diego&#39;)
    ->update([&#39;delayed&#39; => 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(&#39;active&#39;, 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 = [&#39;deleted_at&#39;];
}

要判断一个模型是否被软删除了的话,可以使用trashed方法

if ($flight->trashed()) {    //}

查询软删除的模型#

包含软删除的模型#

如果模型被软删除了,普通查询是不会查询到该结果的,可以使用withTrashed方法强制返回软删除的结果

$flights = App\Flight::withTrashed()
      ->where(&#39;account_id&#39;, 1)
      ->get();// 关联操作中也可以使用
$flight->history()->withTrashed()->get();

只查询软删除的模型#

$flights = App\Flight::onlyTrashed()
      ->where(&#39;airline_id&#39;, 1)
      ->get();

还原软删除的模型#

查询到软删除的模型实例之后,调用restore方法还原

$flight->restore();

也可以在查询中使用

App\Flight::withTrashed()
    ->where(&#39;airline_id&#39;, 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn