ホームページ  >  記事  >  PHPフレームワーク  >  Laravel における多対多の簡単な分析

Laravel における多対多の簡単な分析

藏色散人
藏色散人転載
2021-07-02 14:21:491246ブラウズ

実際の開発では、いくつかの一般的な対応パターンに遭遇することがよくあります。

One-To-One //一对一

One-To-Many //一对多

Many-To-Many //多对多

私がこれらの概念に初めて触れたとき、実際にはよく理解できませんでした。しかし、これらの概念を生活に当てはめてみると、理解するのは簡単です。オンラインでよく見る例を見てみましょう:

User-To-Profile // One-To-One

User-To-Articles // One-To-Many

Articles-To-Tags // Many-To-Many

は次のように変換されます:

    #1 人のユーザーが 1 つのユーザー プロファイルに対応します
  1. ユーザーは複数の記事を公開できます
  2. 記事とタグの間には多対多の関係があります。記事には複数のタグを含めることができ、タグは複数の記事に属することができます
これらの関係モデルの中で実装が最も難しいのは多対多の関係

Many-To-Many ですが、Laravel の強力な Eloquent の助けを借りて、この機能を実装できて非常に満足です。

1. データベース テーブルの作成

Create

articlestable

Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
Create

tagstable

Schema::create('tags', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
Ofもちろん、この古典的な問題を解決するには、これら 2 つのテーブルだけでは十分ではありません。これら 2 つのテーブルに加えて、

articletag を接続するためのリレーションシップ テーブルを確立する必要があります。公式の標準ルールに従っている場合、3 番目のテーブルは次のようになります:

テーブル名

article_tag

Schema::create('article_tag', function(Blueprint $table) {
            $table->integer('article_id')->unsigned()->index();
            $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');
            $table->integer('tag_id')->unsigned()->index();
            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
        });
公式仕様に従っていない場合は、次のようになります。モデルで外部キーを指定する必要があります。

2. モデルを作成し、関係を指定します

Article.php 内:

<code><br>    public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }</code>

Tag.php 内:

public function articles()
    {
        return $this->belongsToMany('App\Article');
    }
ここで 2 つの点に注意してください:

    リレーションシップを宣言するときに、
  1. $this->belongsToMany('App\Article',' など) の外部キーを指定できます。 external_key', 'other_key');
  2. article_tag テーブルに timestamps() を追加する場合、つまり、created_at と updated_at の 2 つのフィールドがテーブルに表示される場合、これを宣言するときにこれを行う必要があります。記事内の関係:
  3. return $this->belongsToMany('App\Tag')->withTimestamps();
  4. 3.
Controller## で使用

# 記事にどのタグが含まれているかを確認したい場合は、これを行うことができます:
$article = Article::find($id);

dd($article->tags);

特定のタグで記事を検索したい場合:

<code><br>public function showArticleByTagName($name)
    {
        $tag = Tag::where('value','=',$name)->first();

        dd($tag->articles);
    }</code>
上記Laravel の

Many-To-Many

.

以上がLaravel における多対多の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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