実際の開発では、いくつかの一般的な対応パターンに遭遇することがよくあります。
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 つのユーザー プロファイルに対応します
- ユーザーは複数の記事を公開できます
- 記事とタグの間には多対多の関係があります。記事には複数のタグを含めることができ、タグは複数の記事に属することができます
Many-To-Many ですが、Laravel の強力な
Eloquent の助けを借りて、この機能を実装できて非常に満足です。
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 つのテーブルに加えて、
article と
tag を接続するためのリレーションシップ テーブルを確立する必要があります。公式の標準ルールに従っている場合、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 つの点に注意してください:
- リレーションシップを宣言するときに、
- $this->belongsToMany('App\Article',' など) の外部キーを指定できます。 external_key', 'other_key');
- return $this->belongsToMany('App\Tag')->withTimestamps();
# 記事にどのタグが含まれているかを確認したい場合は、これを行うことができます:
$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
.