ホームページ  >  記事  >  PHPフレームワーク  >  Laravel モデル間の最も単純な「1 対 1」の関係について話しましょう。

Laravel モデル間の最も単純な「1 対 1」の関係について話しましょう。

藏色散人
藏色散人転載
2020-10-12 14:10:342487ブラウズ

以下は、#Laravel のチュートリアルコラムで、Laravel モデル間の最も単純な「1 対 1」の関係を紹介します。 , 困っている友達のお役に立てれば幸いです!

Laravel モデル間の最も単純な「1 対 1」の関係について話しましょう。

#はじめにリレーショナル データベースは、非常に使いやすいデータ関連付けバインディング モードを提供します。 SQL ステートメントは、関連するデータのクエリと操作を簡単に実行できます。

すべての関係をデータベースレベルで操作すると、非常に不便になります。

ということで、laravelモデルではアソシエーション関係が提供されており、この記事ではその使い方を整理していきます。

コード時間PPT のように原稿を読んで、すべての関係モデルをリストする必要はありません。学習には効率的ではありません。

例から始めて、関連関係がどのような問題を解決するのか、またその使用方法を見てみましょう。

最初はデータベースの準備です。次の 2 つのテーブルの間にフィールドの対応があると仮定します:

Laravel モデル間の最も単純な「1 対 1」の関係について話しましょう。コマンド ラインを使用してプロファイルを作成します。ファイル:

php artisan make:model Profile --migration

生成された

app/Profile.php

ファイルの内容を見てみましょう:

namespace App;use Illuminate\Database\Eloquent\Model;class Profile extends Model {}
##–migration

オプションが使用され、laravel が自動的に実行されます。

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

Association

すべての準備が整いました。では、「関連付けを使用してデータの一貫性を処理する」を始めましょう。ユーザーはプロファイルに対応するため、これは 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 サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。