[Laravel 5 基礎] 21 – 多対多の関係とタグ
多対多の関係のタグの例
はじめに
前のセクションでは、フラッシュ メッセージの使用方法を説明し、それが何であるかを学びましたフラッシュメッセージなので簡単に使えます。このセクションでは、記事タグを例として、データベースの多対多形式について説明します。
手順
開発環境: Windows 7
Laravel バージョン: 5+
IDE: Phpstorm
データベースはここにあります。Laravel の Eloquent と Migration を以前 2 つのセクションで紹介し、リレーションシップのデータ テーブル間の外部キー関係について説明しました。これも基本的な 1 対です。多くの。
このセクションでは、データベース内の多対多について説明します。例としては、タグ、記事タグが挙げられます。
タグの紹介
これで、記事を書く、記事を公開するなど、ブログの基本的な機能が完成しました。しかし、記事数が増えてくると、記事の選別や管理が問題になってきますが、各記事のキーワードにタグを付けることができれば、記事の管理が大幅に改善されます。
Eloquent が記事のタグ付けをどのように実装しているかを見てみましょう。
Article.php を開きます。各記事 (記事) に作成者 (ユーザー) を関連付けるために使用した方法をまだ覚えていますか?忘れてください。答えることはできません。下部の user() メソッドで、記事がどこに属しているかを示す「belongsTo」という文を書きます。このステートメントは hasMany に関連しています。1 つの記事は 1 人の著者にのみ属することができますが、1 人の著者は複数の記事を持つことができます。これが関係です。
しかし、ここでのタグでは、belongsTo と hasMany は少し無理があります。記事は 1 つのタグにのみ属することはできません。意味をなすためには、belongsToMany タグでなければなりません。
以下に示すように、user() メソッドの下に tags() メソッドがあります。
public function tags(){ return $this->belongsToMany('App\Tag');}
次に、Tag Eloquent モデル Bar を作成しましょう。
タグ モデル クラスとタグ テーブルを作成します
コマンド ラインに次のコマンドを入力します: php 職人 make:model タグ。
コマンドラインに次のコマンドを入力します: php 職人 make:migration create tagtable –create=tags
この create tagtable.php を開き、ここにタグ テーブルの属性または列をいくつか作成します。 🎜>
public function up(){ Schema::create('tags', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->timestamps(); }); 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'); $table->timestamps(); });}public function down(){ Schema::drop('tags'); Schema::drop('article_tag');}
次に、移行を実行し、コマンドラインで実行します: php 職人 移行
次に、先ほど作成した Tag.php を開きます。
タグとアーティクルには多対多の関係があるため、タグ モデル クラスにはアーティクルを指すメソッドも必要です。
public function articles(){ return $this->belongsToMany('App\Article'); |}
>>> $tag = new App\Tag;=> App\Tag {#646}>>> $tag->name='personal';=> "personal">>> $tag->save();=> true>>> App\Tag::all()->toArray();=> [ [ "id" => 1, "name" => "personal", "created_at" => "2016-04-30 13:48:49", "updated_at" => "2016-04-30 13:48:49", ], ]
これら 2 つのテーブルを関連付けてみましょう。
いじりモード:
>>> App\Tag::all()->toArray();=> [ [ "id" => 1, "name" => "personal", "created_at" => "2016-04-30 13:48:49", "updated_at" => "2016-04-30 13:48:49", ], ]>>> $article=App\Article::first();=> App\Article {#659 id: "1", user_id: "1", created_at: "2016-03-20 15:05:18", updated_at: "2016-03-20 15:05:18", title: "谭晓龙创建的文章", body: "真的是", published_at: "2016-03-28 00:00:00", }>>> $article->toArray();=> [ "id" => 1, "user_id" => "1", "created_at" => "2016-03-20 15:05:18", "updated_at" => "2016-03-20 15:05:18", "title" => "谭晓龙创建的文章", "body" => "真的是", "published_at" => "2016-03-28 00:00:00", ]>>> $article->tags()->attach(1);Illuminate\Database\QueryExceptionwithmessage 'SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: article_tag.created_at (SQL: insert into "article_tag" ("article_id", "tag_id") values (1, 1))'
残念ながら、作成時間がなかったため、エラーが発生しました。変更してください。
Article.php を開き、tags() メソッドを見つけて次のように変更します。
public function tags(){ return $this->belongsToMany('App\Tag')->withTimestamps();}
再度アタッチ コマンドを実行します:
>>> $article = App\Article::first();=> App\Article {#655 id: "1", user_id: "1", created_at: "2016-03-20 15:05:18", updated_at: "2016-03-20 15:05:18", title: "谭晓龙创建的文章", body: "真的是", published_at: "2016-03-28 00:00:00", }>>> $article->tags()->attach(1); => null>>> DB::select('select * from article_tag');=> [ {#650 +"article_id": "1", +"tag_id": "1", +"created_at": "2016-04-30 14:00:31", +"updated_at": "2016-04-30 14:00:31", }, ]>>> $article->tags->toArray();=> [ [ "id" => 1, "name" => "personal", "created_at" => "2016-04-30 13:48:49", "updated_at" => "2016-04-30 13:48:49", "pivot" => [ "article_id" => "1", "tag_id" => "1", "created_at" => "2016-04-30 14:00:31", "updated_at" => "2016-04-30 14:00:31", ], ], ]>>> $article->toArray();=> [ "id" => 1, "user_id" => "1", "created_at" => "2016-03-20 15:05:18", "updated_at" => "2016-03-20 15:05:18", "title" => "谭晓龙创建的文章", "body" => "真的是", "published_at" => "2016-03-28 00:00:00", "tags" => [ [ "id" => 1, "name" => "personal", "created_at" => "2016-04-30 13:48:49", "updated_at" => "2016-04-30 13:48:49", "pivot" => [ "article_id" => "1", "tag_id" => "1", "created_at" => "2016-04-30 14:00:31", "updated_at" => "2016-04-30 14:00:31", ], ], ], ]>>> $article->tags->lists('name'); => Illuminate\Support\Collection {#653 all: [ "personal", ], }
>>> $tag=App\Tag::first();=> App\Tag {#666 id: "1", name: "personal", created_at: "2016-04-30 13:48:49", updated_at: "2016-04-30 13:48:49", }>>> $tag->articles->toArray();=> [ [ "id" => 1, "user_id" => "1", "created_at" => "2016-03-20 15:05:18", "updated_at" => "2016-03-20 15:05:18", "title" => "谭晓龙创建的文章", "body" => "真的是", "published_at" => "2016-03-28 00:00:00", "pivot" => [ "tag_id" => "1", "article_id" => "1", ], ], ]
まとめ
これが今日お話しする内容であり、Relationship の拡張と応用に相当します。
今日の内容を吸収して消化していただければ幸いです。相互励まし合い。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします
