実際の開発では、いくつかの一般的な対応パターンに遭遇することがよくあります。
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(); });
ログイン後にコピー
tagstable
Schema::create('tags', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->timestamps(); });
ログイン後にコピー
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'); });
ログイン後にコピー
Article.php 内:
<code><br> public function tags() { return $this->belongsToMany('App\Tag'); }</code>
ログイン後にコピー
Tag.php 内:
public function articles() { return $this->belongsToMany('App\Article'); }
ログイン後にコピー
- リレーションシップを宣言するときに、
- $this->belongsToMany('App\Article',' など) の外部キーを指定できます。 external_key', 'other_key');
- return $this->belongsToMany('App\Tag')->withTimestamps();
# 記事にどのタグが含まれているかを確認したい場合は、これを行うことができます:
$article = Article::find($id);
dd($article->tags);
ログイン後にコピー
特定のタグで記事を検索したい場合:
$article = Article::find($id); dd($article->tags);
ログイン後にコピー
<code><br>public function showArticleByTagName($name) { $tag = Tag::where('value','=',$name)->first(); dd($tag->articles); }</code>
ログイン後にコピー
Many-To-Many
.