クイックスタート
- 雄弁なモデル規約
- データ テーブル名
- 主キー
- ブロックされた結果
- カーソルの使用
- ##単一モデル/コレクションの取得
- #『見つかりません』例外
- 挿入 バッチ更新
- ##バッチ割り当て
- 保護された属性
- モデルの削除
- クエリの範囲
- イベント
- オブザーバー
Eloquent: はじめに
Laravel の Eloquent ORM は、データベースと対話するための美しく簡潔な ActiveRecord 実装を提供します。各データベース テーブルには、テーブルと対話するために使用される対応する「モデル」があります。モデルを通じてデータ テーブル内のデータをクエリし、新しいレコードをデータ テーブルに挿入できます。 始める前に、config/database.php
でデータベース接続を構成してください。データベース構成の詳細については、ドキュメントを参照してください。composer.json
ファイルに基づいて自動的にロードできる場所ならどこにでも配置できます。すべての Eloquent モデルは、Illuminate\Database\Eloquent\Model クラスを継承します。
モデルを作成する最も簡単な方法は、
make:model アーティザン コマンド:
php artisan make:model Flightを使用することです。モデルの生成時にデータベース移行を生成する場合は、次のように使用できます。
- -migration または
-m
php artisan make:model Flight --migration php artisan make:model Flight -m
##Eloquent Model Convention 次に、
flightsモデルの例を見てみましょう:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model{ // }
Eloquent には、 Eloquent は、各データも次のように想定します。 table さらに、Eloquent は主キーが自動インクリメントする整数値であると想定します。これは、主キーがデフォルトで デフォルトでは、Eloquent は タイムスタンプ形式。モデルの タイムスタンプを格納するフィールド名をカスタマイズする必要がある場合は、次のように設定できます。実装するモデルの デフォルトでは、 Eloquent モデルはアプリケーションによって使用されます。 デフォルトのデータベース接続が設定されています。モデルに別の接続を指定する場合は、 モデルの一部の属性のデフォルト値を定義したい場合は、モデルに モデルとそれに関連付けられたデータベース テーブルを作成した後、データベースからデータをクエリできます。各 Eloquent モデルは、関連するデータ テーブルをより迅速にクエリするために使用できる強力なクエリ ビルダーと考えてください。例: Eloquent の {tip} model はクエリ ビルダーでもあるため、クエリ ビルダーで使用できるすべてのメソッドについても読む必要があります。これらのメソッドは Eloquent クエリで使用できます。 For 配列のようにコレクションを反復処理できます: 数千の Eloquent 結果を処理する必要がある場合は、 メソッドに渡される最初のパラメータは、各「チャンク」が受信するデータの量です。クロージャは 2 番目のパラメータとして渡され、データベースからチャンクが取得されるたびに呼び出されます。データベース クエリを実行し、取得したチャンク化された結果をクロージャー メソッドに渡します。 指定したデータ テーブルからすべてのレコードを取得することに加えて、 主キーの配列をパラメータとして使用して モデルが見つからない場合に例外をスローしたい場合があります。これはコントローラーやルーティングで非常に役立ちます。 例外がキャッチされなかった場合、 クエリ ビルダーが提供する データ テーブル名
Flight
モデルにどのデータ テーブルを使用するかを指示していないことに注意してください。別の名前が明示的に指定されない限り、クラスの複数形「snakes」がテーブル名として使用されます。したがって、この場合、Eloquent は、Flight
モデルが flights
データ テーブルからのデータを保存すると想定します。モデルで table
属性を定義することで、カスタム データ テーブルを指定できます。 <?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model{
/**
* 与模型关联的表名
*
* @var string
*/
protected $table = 'my_flights';
}
主キー
id
という名前の主キー列があります。保護された $primaryKey
プロパティを定義して、規則をオーバーライドできます。 int
型に自動的に変換されることを意味します。増加しない主キーまたは数値以外の主キーを使用したい場合は、パブリック $incrementing
プロパティを false
に設定する必要があります。主キーが整数でない場合は、モデルの保護された $keyType
プロパティを string
に設定する必要があります。 タイムスタンプ
created_at
と updated_at
がデータ テーブルに存在することを期待します。 Eloquent にこれら 2 つの列を自動的に管理させたくない場合は、モデルの $timestamps
属性を false
に設定してください: <?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model{
/**
* 指示模型是否自动维护时间戳
*
* @var bool
*/
public $timestamps = false;
}
$dateFormat
プロパティを設定します。この属性は、日付属性がデータベースにどのように格納されるか、およびモデルが配列または JSON にシリアル化される形式を決定します。 <?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model{
/**
* 模型日期列的存储格式。
*
* @var string
*/
protected $dateFormat = 'U';
}
CREATED_AT
および UPDATED_AT
定数値: <?php
class Flight extends Model{
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
}
Database Connection
$connection
プロパティを設定します: <?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model{
/**
* 模型的连接名称
*
* @var string
*/
protected $connection = 'connection-name';
}
Defaultプロパティ値
$attributes
属性を定義できます: <?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model{
/**
* 模型的默认属性值。
*
* @var array
*/
protected $attributes = [
'delayed' => false,
];
}
モデルの取得
<?php
$flights = App\Flight::all();
foreach ($flights as $flight) {
echo $flight->name;
}
追加の制約
all
メソッドは、モデル内のすべての結果を返します。各 Eloquent モデルはクエリ ビルダーとして機能するため、クエリ条件を追加して、get
メソッドを使用してクエリ結果を取得することもできます: $flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
モデルのリロード
fresh
メソッドと refresh
メソッドを使用してモデルをリロードできます。 fresh
このメソッドはデータベースからモデルを再度取得します。既存のモデル インスタンスは影響を受けません。$flight = App\Flight::where('number', 'FR 900')->first();
$freshFlight = $flight->fresh();
refresh
メソッドは、データベースからの新しいデータを既存のモデルに再割り当てします。さらに、すでにロードされている関係も再ロードされます: $flight = App\Flight::where('number', 'FR 900')->first();
$flight->number = 'FR 456';$flight->refresh();
$flight->number;
// "FR 900"
Collection
Eloquent The all
メソッドと get
メソッドは、複数の結果をクエリして、Illuminate\Database\Eloquent\Collection
インスタンスを返すことができます。 Collection
クラスは、Eloquent の結果を処理するための多数のヘルパー関数を提供します: $flights = $flights->reject(function ($flight) {
return $flight->cancelled;
});
foreach ($flights as $flight) {
echo $flight->name;
}
結果のチャンク化
chunk
コマンドを使用します。 chunk
メソッドは、Eloquent モデル内の「チャンク」を取得し、指定された Closure
に提供して処理します。大きな結果セットを処理する場合は、chunk
メソッドを使用してメモリを節約します。 Flight::chunk(200, function ($flights) {
foreach ($flights as $flight) {
//
}
});
カーソルの使用
cursor
メソッドを使用すると、カーソルを使用してデータベースを横断でき、クエリは 1 回だけ実行されます。大量のデータを処理する場合、cursor
メソッドを使用するとメモリ使用量を大幅に削減できます。 foreach (Flight::where('foo', 'bar')->cursor() as $flight) {
//
}
単一のデータを取得します。モデル / コレクション
find
または first
メソッドを使用して単一のレコードを取得できます。これらのメソッドは、モデルのコレクションではなく単一のモデル インスタンスを返します。 // 通过主键检索一个模型...
$flight = App\Flight::find(1);
// 检索符合查询限制的第一个模型...
$flight = App\Flight::where('active', 1)->first();
find
メソッドを呼び出すこともできます。これにより、モデルのコレクションが返されます。一致するレコード: $flights = App\Flight::find([1, 2, 3]);
『見つかりません』例外
findOrFail
メソッドと firstOrFail
メソッドはクエリの最初の結果を取得しますが、見つからない場合は Illuminate\Database\Eloquent\ModelNotFoundException
例外: $model = App\Flight::findOrFail(1);
$model = App\Flight::where('legs', '>', 100)->firstOrFail();
404
応答が自動的にユーザーに返されます。つまり、これらのメソッドを使用する場合、404
応答: :Route::get('/api/flights/{id}', function ($id) {
return App\Flight::findOrFail($id);
});
を返すチェックを記述する必要はありません。 コレクションの取得
count
、sum
、max
、およびその他の集計関数も使用できます。 。これらのメソッドは、モデル インスタンスではなく、単純に適切なスカラー値を返します。 $count = App\Flight::where('active', 1)->count();
$max = App\Flight::where('active', 1)->max('price');
Insert & Update Model
データベースに新しいレコードを追加するには、まず新しいモデル インスタンスを作成し、そのインスタンスのプロパティを設定して、# を呼び出します。 ## save
メソッド: <?php
namespace App\Http\Controllers;
use App\Flight;use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class FlightController extends Controller{
/**
* 创建一个新的航班实例
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// 校验请求...
$flight = new Flight;
$flight->name = $request->name;
$flight->save();
}
}
この例では、HTTP リクエスト パラメーター
name
App\Flight の
name# に割り当てます。モデル インスタンス ## 属性。 save
メソッドが呼び出されると、新しいレコードが挿入されます。 created_at
および updated_at
タイムスタンプは自動的に設定されるため、手動で割り当てる必要はありません。
メソッドは、既に存在するモデルを更新するためにも使用できます。データベース。モデルを更新するには、まずモデルを取得し、更新するプロパティを設定してから、
save メソッドを呼び出す必要があります。同様に、updated_at
タイムスタンプは自動的に更新されるため、値を手動で割り当てる必要はありません: $flight = App\Flight::find(1);
$flight->name = 'New Flight Name';$flight->save();
バッチ更新
行きのすべての
active および destination
フライトが遅延としてマークされます: App\Flight::where('active', 1)
->where('destination', 'San Diego')
->update(['delayed' => 1]);
update
このメソッドは、キーがフィールド名でデータが値である配列を受け入れます。
{note} Eloquent を通じてバッチ更新する場合、更新されたモデルは
saved
updatedすべての属性を割り当てる場合イベントをトリガーしません。バッチ更新中はモデルが取得されないためです。
$guarded 空の配列として定義:
/** * 不可以批量赋值的属性。 * * @var array */ protected $guarded = [];#その他の作成方法
firstOrCreate/
firstOrNew
バッチ割り当てに使用できる 2 つのメソッドを次に示します: firstOrCreateおよび
firstOrNew 。
firstOrCreate このメソッドは、指定された列/値を通じてデータベース内のデータと照合します。対応するモデルがデータベース内に見つからない場合は、最初のパラメータの属性と 2 番目のパラメータの属性からもレコードが作成され、データベースに挿入されます。
firstOrNew メソッドは、
firstOrCreate メソッドと同様に、指定された属性によってデータベース内のレコードを検索しようとします。違いは、
firstOrNew メソッドが対応するモデルを見つけられない場合、新しいモデル インスタンスを返すことです。
firstOrNew 返されたモデル インスタンスはまだデータベースに保存されていないことに注意してください。保存するには、
save メソッドを手動で呼び出す必要があります:
// 通过 name 来查找航班,不存在则创建... $flight = App\Flight::firstOrCreate(['name' => 'Flight 10']); // 通过 name 查找航班,不存在则使用 name 和 delayed 属性创建... $flight = App\Flight::firstOrCreate(['name' => 'Flight 10'], ['delayed' => 1]); // 通过 name 查找航班,不存在则创建一个实例... $flight = App\Flight::firstOrNew(['name' => 'Flight 10']); // 通过 name 查找航班,不存在则使用 name 和 delayed 属性创建一个实例... $flight = App\Flight::firstOrNew(['name' => 'Flight 10'], ['delayed' => 1]);
updateOrCreate
既存のモデルを更新したり、モデルが存在しない場合は新しいモデルを作成したりするシナリオが発生する場合もあります。 Laravel には、たった 1 ステップで実装できる updateOrCreate
メソッドが用意されています。 firstOrCreate
メソッドと同様、updateOrCreate
は対応するモデルと一致するため、save()
メソッドを呼び出す必要はありません:
// 如果有从奥克兰到圣地亚哥的航班,则价格定为99美元。 // 如果没匹配到存在的模型,则创建一个。 $flight = App\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99] );
モデルの削除
モデル インスタンスで delete
メソッドを呼び出してインスタンスを削除できます:
$flight = App\Flight::find(1); $flight->delete();
主キーによるモデルの削除
上記の例では、delete
を呼び出す前に、データベース内で対応するモデルを見つける必要があります。実際、モデルの主キーがわかっている場合は、データベース内でモデルを検索せずに、destroy
メソッドを直接使用してモデルを削除できます。 destroy
このメソッドは、単一の主キーをパラメーターとして受け入れるだけでなく、複数の主キーも受け入れるか、配列またはコレクションを使用して複数の主キーを保存します。
App\Flight::destroy(1); App\Flight::destroy(1, 2, 3); App\Flight::destroy([1, 2, 3]); App\Flight::destroy(collect([1, 2, 3]));
クエリ モデルによる削除
モデルに対して削除ステートメントを実行することもできます。この例では、非アクティブとしてマークされたすべてのフライトを削除します。バッチ更新と同様に、バッチ削除では、削除されたモデルのモデル イベントはトリガーされません:
$deletedRows = App\Flight::where('active', 0)->delete();
ソフト削除実際にデータベース レコードを削除することに加えて、Eloquent はモデルを「ソフト削除」することもできます。 。論理的に削除されたモデルは、実際にはデータベースから削除されません。実際、{note} Eloquent を通じてバッチ削除ステートメントを実行する場合、
deleting
および削除されました
モデルイベント。したがって、delete ステートメントを実行する場合、モデルの例は決して取得されません。
deleted_at 属性がモデルに設定され、その値がデータベースに書き込まれます。
deleted_at 値が空でない場合は、モデルが論理的に削除されたことを意味します。モデルのソフト削除機能を有効にしたい場合は、モデルで
Illuminate\Database\Eloquent\SoftDeletes トレイトを使用する必要があります:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Flight extends Model{ use SoftDeletes; }
{tip}に自動的に変換します。 もちろん、SoftDeletes
トレイトは、
deleted_at属性を
DateTime/
Carbonインスタンス
deleted_at フィールドがデータ テーブルに追加されます。 Laravel のデータベース移行には、このフィールドを作成するメソッドがあります:
Schema::table('flights', function (Blueprint $table) { $table->softDeletes(); });さて、モデル インスタンスで
delete メソッドを使用すると、現在の日付と時刻が
deleted_at に書き込まれます。 ### 分野。同時に、クエリ結果では論理的に削除されたレコードが自動的に除外されます。
メソッドを使用して、現在のモデルが論理的に削除されたかどうかを確認できます: if ($flight->trashed()) {
//
}
論理的に削除されたモデルを含める
前述したように、クエリ結果には論理的に削除された結果が自動的に除外されます。もちろん、withTrashed
メソッドを使用して、論理的に削除されたモデルを含むモデルを取得できます:
$flights = App\Flight::withTrashed() ->where('account_id', 1) ->get();
withTrashed
このメソッドは関連クエリでも使用できます:
$flight->history()->withTrashed()->get();
論理的に削除されたモデルの取得
onlyTrashed
メソッド Only 論理的に削除されたモデルを取得します:
$flights = App\Flight::onlyTrashed() ->where('airline_id', 1) ->get();
論理的に削除されたモデルの復元
論理的に削除されたモデルが「元に戻される」場合は、論理的に削除されたデータに対して restore
メソッドを使用して、データを復元することができます。有効な状態:
$flight->restore();
クエリで restore
メソッドを使用して、複数のモデルを迅速に復元することもできます。他のバッチ操作と同様、この操作はモデル内のイベントをトリガーしません。
App\Flight::withTrashed() ->where('airline_id', 1) ->restore();
withTrashed
メソッドと同様に、restore
メソッドも関連付けで使用されます。
$flight->history()->restore();
永久削除
実際にデータを削除するには、forceDelete
メソッドを使用します。
// 单个模型实例的永久删除... $flight->forceDelete(); // 关联模型的永久删除... $flight->history()->forceDelete();#クエリ スコープ##グローバル スコープグローバル スコープ ドメインが追加できるモデルクエリへの制約。 Laravel の
Soft Delete
関数は、この機能を使用してデータベースから「削除されていない」モデルを取得します。独自のグローバル スコープを作成できます。これは、各モデル クエリに制約を追加するのに非常に簡単で便利です。 グローバル スコープの作成グローバル スコープの作成 スコープは簡単です。Illuminate\Database\Eloquent\Scope
インターフェイスを実装するクラスを定義し、apply メソッドを実装します。必要に応じて、
apply メソッドにクエリの
where 条件を追加します。
<?php namespace App\Scopes; use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class AgeScope implements Scope{ /** * 把约束加到 Eloquent 查询构造中。 * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function apply(Builder $builder, Model $model) { $builder->where('age', '>', 200); } }
{tip} select ステートメントを使用する場合は、selectメソッドの代わりにグローバル スコープの適用グローバル スコープをモデルに割り当てるには、モデルのaddSelect
メソッドを使用する必要があります。これにより、既存の選択ステートメントが不注意で置き換えられることを効果的に防止できます。
boot
メソッドをオーバーライドして # を使用する必要があります。 ##addGlobalScope メソッド:
スコープを追加した後、<?php
namespace App;use App\Scopes\AgeScope;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
/**
* 模型的 「启动」 方法.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope(new AgeScope);
}
}
User::all()
のクエリにより次の SQL クエリ ステートメントが生成されます:
select * from `users` where `age` > 200
匿名グローバル スコープ
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class User extends Model{ /** *模型的「启动」方法. * * @return void */ protected static function boot() { parent::boot(); static::addGlobalScope('age', function (Builder $builder) { $builder->where('age', '>', 200); }); } }
グローバル スコープをキャンセルする
現在のクエリのグローバル スコープをキャンセルする必要がある場合は、withoutGlobalScope
メソッドを使用する必要があります。このメソッドは、唯一のパラメータとしてグローバル スコープのクラス名のみを受け入れます:
User::withoutGlobalScope(AgeScope::class)->get();
または、グローバル スコープの定義にクロージャが使用されている場合:
User::withoutGlobalScope('age')->get();
一部またはすべてをキャンセルする必要がある場合グローバル スコープの場合、withoutGlobalScopes
メソッドを使用する必要があります:
// 取消所有的全局作用域... User::withoutGlobalScopes()->get(); // 取消部分全局作用域... User::withoutGlobalScopes([ FirstScope::class, SecondScope::class ])->get();#ローカル スコープlocal スコープを使用すると、アプリケーション間で再利用できる共通の制約セットを定義できます。たとえば、多くの場合、すべての「人気のある」ユーザーを取得する必要があるかもしれません。このようなスコープを定義するには、対応する Eloquent モデル メソッドの前に
scope プレフィックスを追加するだけです:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 只查询受欢迎的用户的作用域. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopePopular($query) { return $query->where('votes', '>', 100); } /** * 只查询 active 用户的作用域. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeActive($query) { return $query->where('active', 1); } }ローカル スコープの使用スコープを定義すると、モデルをクエリするときにスコープ メソッドを呼び出すことができます。ただし、これらのメソッドを呼び出すときに
scope プレフィックスを含める必要はありません。複数のスコープへの呼び出しをチェーンすることもできます。例:
$users = App\User::popular()->active()->orderBy('created_at')->get();複数の Eloquent モデルを
or クエリ ランナーと統合します。クロージャ コールバックの使用が必要になる場合があります:
$users = App\User::popular()->orWhere(function (Builder $query) { $query->active(); })->get();これは少し面倒になる可能性があるため、Laravel では「高次」の
orWhere メソッドを提供しています。これにより、クロージャを使用せずに呼び出しスコープを連鎖させることができます。
$users = App\User::popular()->orWhere->active()->get();Dynamicスコープパラメータを受け入れるスコープを定義したい場合があります。これは、追加のパラメーターをスコープに渡すことで実現できます。スコープ パラメータは、
$query パラメータの後に配置する必要があります:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 将查询作用域限制为仅包含给定类型的用户。 * * @param \Illuminate\Database\Eloquent\Builder $query * @param mixed $type * @return \Illuminate\Database\Eloquent\Builder */ public function scopeOfType($query, $type) { return $query->where('type', $type); } }これにより、スコープを呼び出すときにパラメータを渡すことができます:
$users = App\User::ofType('admin')->get();モデルの比較2 つのモデルが「同じ」かどうかを判断する必要がある場合があります。
is Eloquent モデルはいくつかのイベントをトリガーし、モデルのライフ サイクルの次のノードに接続できるようにします: {note} Eloquent を通じてバッチ更新を実行する場合、更新されたモデルの まず、Eloquent モデルで After Eloquent イベントを定義およびマッピングすると、イベント リスナーを使用してこれらのイベントを処理できます。 make:observer メソッドを使用すると、2 つのモデルに同じ主キー、テーブル、データベース接続があるかどうかを簡単に検証できます。 ##
イベント
retrieved
、creating
、作成
, 更新
, 更新
, 保存
, 保存
, 削除
, 削除
、 restoreing
および restored
。イベントを使用すると、特定のモデルがデータベースに保存または更新されるたびにコードを実行できます。各イベントは、コンストラクターを通じてモデル インスタンスを受け取ります。 retrieved
イベントは、既存のモデルがデータベースからデータを検索するときに発生します。新しいモデルが保存されるたびに、creating
および created
イベントが発生します。モデルがデータベースにすでに存在し、save
メソッドが呼び出された場合、updating
/ updated
イベントがトリガーされます。このような場合、 Saving
/ saved
イベントもトリガーされます。 saved
および updated
イベントはトリガーされません。これは、バッチ更新中にモデルが実際に取得されないためです。 $dispatchesEvents
属性を定義して、Eloquent モデルのライフサイクルのいくつかのノードを独自のイベント クラスにマップします: if ($post->is($anotherPost)) {
//
}
Artisan コマンドを使用すると、新しいオブザーバー クラスをすばやく作成できます。
<?php
namespace App;
use App\Events\UserSaved;
use App\Events\UserDeleted;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable{
use Notifiable;
/**
* 为模型事件。
*
* @var array
*/
protected $dispatchesEvents = [
'saved' => UserSaved::class,
'deleted' => UserDeleted::class,
];
}
App/Observers フォルダーに配置します。このディレクトリが存在しない場合は、Artisan が作成します。オブザーバーを有効にするには、次のメソッドを使用します。
php artisan make:observer UserObserver --model=User
observe メソッドを使用して、観察するモデルにオブザーバーを登録します。オブザーバーは、サービス プロバイダーの
boot メソッドに登録することもできます。以下は、
AppServiceProvider にオブザーバーを登録する例です。
<?php namespace App\Observers; use App\User; class UserObserver{ /** * 处理 User 「新建」事件。 * * @param \App\User $user * @return void */ public function created(User $user) { // } /** * 处理 User 「更新」 事件。 * * @param \App\User $user * @return void */ public function updated(User $user) { // } /** * 处理 User 「删除」 事件。 * * @param \App\User $user * @return void */ public function deleted(User $user) { // } }この記事は、