Maison > Article > développement back-end > Explication détaillée du framework Laravel des parties de base d'EloquentORM
Eloquent ['eləkwənt]
, la méthode du constructeur de requête de base de données est également utilisée pour la classe modèle, mais la partie DB::table
(« nom de la table ») est omise.
Utilisez la variable membre protégée $table dans le modèle pour spécifier le nom de la table liée.
<?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
Supposons que chaque table ait une clé primaire nommée id. Ce nom de champ peut être remplacé via la variable membre $primaryKey
De plus, Eloquent
suppose que le champ de clé primaire est. un entier incrémentiel, si vous souhaitez utiliser une clé primaire non incrémentée ou une clé primaire non numérique, vous devez spécifier l'attribut public
$incrementing
dans le modèle comme étant false
.
Par défaut, Eloquent
s'attend à ce que deux champs created_at
et updated_at
existent dans la table, et le type de champ est timestamp
Si vous ne souhaitez pas que ces deux champs, définissez $timestamps
sur 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'; }Utilisez protected $connection = 'connection-name' pour spécifier la connexion à la base de données utilisée par le modèle. RequêteOpérations de requête de base# La
méthode all est utilisée pour renvoyer tous les résultats dans la table modèle
$flights = Flight::all();foreach ($flights as $flight) { echo $flight->name; }Vous pouvez également utiliser la
méthode pour interroger les résultats Ajouter des contraintes get
$flights = App\Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get();Vous pouvez voir que la méthode constructeur de requête peut également être utilisée pour les classes de modèles Dans ORM éloquent, les méthodes
et get
interrogez plusieurs ensembles de résultats, leur valeur de retour est un all
objet, qui fournit une variété de méthodes pour opérer sur l'ensemble de résultats IlluminateDatabaseEloquentCollection
public function find($key, $default = null); public function contains($key, $value = null); public function modelKeys(); public function diff($items)...Il existe de nombreuses méthodes pour cet objet, seule une petite partie est répertoriée ici. Pour plus de méthodes, reportez-vous à la documentation de l'API Documentation sur la collection et l'utilisation. Pour le traitement segmenté d'un grand nombre de résultats, la méthode chunk est également utilisée
Flight::chunk(200, function ($flights) { foreach ($flights as $flight) { // } });pour interroger un seul résultat et les méthodes
et find
sont utilisées pour interroger un seul résultat et une seule instance de modèle sont renvoyés. first
// 通过主键查询模型...$flight = App\Flight::find(1); // 使用约束...$flight = App\Flight::where('active', 1)->first();L'utilisation de la méthode
peut également renvoyer plusieurs résultats, sous la forme d'un objet find
, et les paramètres sont plusieurs clés primaires Collection
$flights = App\Flight::find([1, 2, 3]);Si aucun résultat ne peut être trouvé, vous pouvez utiliser la méthode
ou findOrFail
Ces deux méthodes lanceront une exception firstOrFail
lorsqu'aucun résultat n'est trouvé IlluminateDatabaseEloquentModelNotFound<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>
$model = App\Flight::findOrFail(1);$model = App\Flight::where('legs', '>', 100)->firstOrFail();Si cette exception n'est pas interceptée, laravel retournera automatiquement. Donnez à l'utilisateur un résultat de réponse 404, donc si vous souhaitez renvoyer 404 lorsqu'il n'est pas trouvé, vous pouvez directement utiliser cette méthode pour renvoyer
Route::get('/api/flights/{id}', function ($id) { return App\Flight::findOrFail($id); });Agrégation de requêtes
$count = App\Flight::where('active', 1)->count();$max = App\Flight::where('active', 1)->max('price');Requête de pageLa requête de page peut utiliser directement la fonction de pagination
LengthAwarePaginator paginate( int $perPage = null, array $columns = array('*'), string $pageName = 'page', int|null $page = null)Description du paramètre
Description du type de paramètre
perPage int Afficher la quantité par page
colonnes tableau Nom de la colonne de requête
pageName chaîne Nom du paramètre du numéro de page
page int Numéro de la page actuelle
. LengthAwarePaginator
$limit = 20;$page = 1;return Enterprise::paginate($limit, ['*'], 'page', $page);InsérerOpérations d'insertion de base #L'insertion de nouvelles données nécessite uniquement la création d'une nouvelle instance de modèle, puis la définition des attributs du modèle et enfin l'appel de la méthode de sauvegarde.
$flight = new Flight;$flight->name = $request->name;$flight->save();Lors de l'appel de la méthode de sauvegarde, les horodatages seront automatiquement définis pour les champs create_at et update_at. Il n'est pas nécessaire de spécifier manuellement Numéro d'insertion d'affectation par lots. Utilisez
La méthode peut effectuer une opération d'insertion consistant à attribuer des valeurs aux attributs du modèle par lots. Cette méthode renverra le modèle nouvellement inséré Avant d'exécuter la méthode create
, vous devez spécifier le create
et attributs dans le modèle pour empêcher l'attribution d'attributs illégale (par exemple, pour empêcher l'attribut fillable
transmis par l'utilisateur d'être saisi par erreur dans la table de données). guarded
is_admin
Le but de la spécification de l'attribut
, et les autres champs seront filtrés, comme une liste blanche, tandis que $fillable
est le contraire, semblable à une liste de liste noire. create
$guarded
protected $fillable = ['name'];// ORprotected $guarded = ['price'];En plus de la méthode de création, deux autres méthodes peuvent être utilisées : firstOrNew et firstOrCreate. La méthode
$flight = App\Flight::create(['name' => 'Flight 10']);est utilisée pour interroger l'enregistrement
en utilisant la paire de valeurs de colonne donnée firstOrCreate
et en insérer un nouveau s'il est introuvable. est similaire à , sauf que s'il n'existe pas, il renverra un nouvel objet modèle. Cependant, le modèle n'est pas persistant et doit être appelé manuellement pour enregistrer l'objet modèle à conserver dans la base de données. . fristOrNew
firstOrCreate
// 使用属性检索flight,如果不存在则创建...$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']); // 使用属性检索flight,如果不存在则创建一个模型实例...$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);
La méthode de sauvegarde peut non seulement être utilisée pour insérer de nouvelles données, mais également pour mettre à jour les données, il suffit d'utiliser d'abord le modèle. La méthode interroge les données à mettre à jour, définit les attributs du modèle sur de nouvelles valeurs, puis enregistre pour mettre à jour. Le champ update_at sera automatiquement mis à jour.
$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();
上述操作后,数据会被真实删除。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!