ホームページ >バックエンド開発 >PHPチュートリアル >Laravelの多対多
実際の開発では、いくつかの一般的な対応パターンに遭遇することがよくあります:
One-To-One //一对一One-To-Many //一对多Many-To-Many //多对多
これらの概念に初めて触れたとき、私は実際にはよく理解できませんでした。しかし、これらの概念を生活に当てはめてみると、非常に簡単に理解できるようになります。オンラインでよく見かける例を見てみましょう。
User-To-Profile // One-To-OneUser-To-Articles // One-To-ManyArticles-To-Tags // Many-To-Many
翻訳は次のとおりです。
1. データベーステーブルを作成する
Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('content'); $table->timestamps(); });
タグテーブルを作成する
Schema::create('tags', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->timestamps(); });
もちろん、これら 2 つのテーブルだけでは、この古典的な問題を解決するには十分ではありません。これら 2 つのテーブルに加えて、リレーションシップ テーブルを確立する必要があります。 Laravel では、公式の標準ルールに従う場合、3 番目のテーブルは次のようになります:
テーブル名 item_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 内:
<br /> public function tags() { return $this->belongsToMany('App\Tag'); }
public function articles() { return $this->belongsToMany('App\Article'); }ここで 2 つの点に注意してください:
$this などの関係を宣言するときに外部キーを指定できます。 ->belongsToMany('AppArticle','foreign_key', 'other_key');
article_tag テーブルに timestamps() を追加する場合、つまり、created_at と updated_at の 2 つのフィールドがテーブルに表示される場合は、Article で関係を宣言します。次のようにする必要があります: return $this->belongsToMany('AppTag')->withTimestamps();
$article = Article::find($id);dd($article->tags);
<br />public function showArticleByTagName($name) { $tag = Tag::where('value','=',$name)->first(); dd($tag->articles); }
Happy Hacking