以下は、#Laravel のチュートリアルコラムで、Laravel モデル間の最も単純な「1 対 1」の関係を紹介します。 , 困っている友達のお役に立てれば幸いです!
#はじめにリレーショナル データベースは、非常に使いやすいデータ関連付けバインディング モードを提供します。 SQL ステートメントは、関連するデータのクエリと操作を簡単に実行できます。
すべての関係をデータベースレベルで操作すると、非常に不便になります。
ということで、laravelモデルではアソシエーション関係が提供されており、この記事ではその使い方を整理していきます。
コード時間PPT のように原稿を読んで、すべての関係モデルをリストする必要はありません。学習には効率的ではありません。
例から始めて、関連関係がどのような問題を解決するのか、またその使用方法を見てみましょう。
最初はデータベースの準備です。次の 2 つのテーブルの間にフィールドの対応があると仮定します:
コマンド ラインを使用してプロファイルを作成します。ファイル:
php artisan make:model Profile --migration
生成された
app/Profile.php ファイルの内容を見てみましょう: namespace App;use Illuminate\Database\Eloquent\Model;class Profile extends Model {}
database/migrations/2020_10_11_015236_create_profiles_table.php ファイルが生成されます。 は、対応するデータベース profiles## を生成するために使用されます。 # テーブル。
まだ古いルールですが、最初にデータベースの移行に使用される up メソッドを実装します:
public function up(){ Schema::create('profiles', function(Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users'); $table->string('url'); $table->string('telephone'); $table->timestamps(); });}
ロールバックのメソッドはリストされていません。テーブルの削除だけです。 。以下の移行手順を手動で実行します。 php artisan migrate
Migrated: 2020_10_11_015236_create_profiles_table.php
すべての準備が整いました。では、「関連付けを使用してデータの一貫性を処理する」を始めましょう。ユーザーはプロファイルに対応するため、これは 1 対 1 の関係になります。次のステートメントを User モデルに追加します:
class User extends Model { public function profile() { return $this->hasOne('App\Profile'); }}
上記のメソッドを定義すると、次のようになります。次のようなチェーンで呼び出されます:
$user = User::find(1)->profile->telephone;
分解して説明しましょう。まず、
User::find($id)を使用して、User モデル オブジェクトのインスタンスを返します。
このインスタンスには、上記の関係ステートメントである profile メソッドがあります。
Call profile 返されるのは Profile オブジェクトのインスタンスなので、電話の元となる Profile のプロパティを引き続き呼び出すことができます。
次の記述方法と同様に、返される結果が異なることに注意することが重要です。 $user = User::find($id);
$user->profile; // 返回 Profile 对象
$user->profile(); // 返回 hasOne 关联关系对象
関連付けられたクエリでは、当然のことながら、関連付けられた更新が存在します。使用法は次のとおりです:
$profile = new Profile; $profile->telephone = '12345678'; $user = User::find(1); $user->profile()->save($profile);
関連付けられた更新の書き込み操作では、当然のことながら、関連付けられた削除とモデル メソッドの呼び出しが存在します:
$user = User::find($id); $user->profile()->delete();
厳密な 1 対 1 の関係により、ユーザーには 1 つのプロファイルしかありません。ユーザーが削除されると、
添付ファイルのない孤独なプロファイルが残ります。
プログラム コンテキストでの一貫性の保証に加えて、ユーザーを削除するときにデータベースの外部キーを使用してプロファイルの関連付けを削除することもできます。次に、移行ファイル
を変更し、次の内容を追加するだけです:
$table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
この記事では、最も単純な「laravel モデル」を紹介します。アソシエーション」「1 対 1」では、プログラムの観点とデータベースの観点から一貫してリソースを削除する方法を 説明しました。プログラミング レベルでは、より複雑な関係が意味を持つため、次の章でさらに多くの関係を紹介します。
以上がLaravel モデル間の最も単純な「1 対 1」の関係について話しましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。