ホームページ > バックエンド開発 > PHPチュートリアル > [Laravel 5 基礎] 23 – タグの同期

[Laravel 5 基礎] 23 – タグの同期

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-20 12:29:21
オリジナル
1020 人が閲覧しました

タグの同期

はじめに

前のセクションでは、UI にタグ選択を実装し、複数のタグを作成できました。しかし、欠陥もあるので、今日はその欠陥が何かを確認し、修正していきます。

手順

開発環境: Windows 7

Laravel バージョン: 5+

IDE: Phpstorm

最後のクラスでは、記事のタグ付けを実装し、複数のタグをタグ付けできるようにしました。最後に、まだ許容範囲内にあると感じましたが、小さな欠陥があると述べました。読者の皆様は気づいたでしょうか。記事を編集し、記事のタグを変更したい場合、変更できることがわかりますが、保存して記事をもう一度見ると、タグは変更されておらず、以前のタグのままです。その理由は何でしょうか?

このセクションの内容は比較的単純で、この小さな欠陥の解決に特化しています。修正する前に、欠陥を確認したほうがよいでしょう。

データベースのチェック

明らかに変更されていますが、なぜ変更されていないのですか? データベースで確認したいのですが。

sqlite> select * fromarticles;1|1|2016-03-20 15:05:18|2016-03-20 15:05:18|谭晓龙创建的文章|真的是|2016-03-28 00:00:002|1|2016-04-23 07:00:13|2016-04-23 07:00:13|flashmessage|hello ~ flashmessage|2016-04-25 00:00:003|1|2016-04-23 07:07:34|2016-04-23 07:07:34|flashtest|flashtest|2016-04-25 00:00:004|1|2016-04-23 07:37:10|2016-04-23 07:37:10|session::put|session::put|2016-04-25 00:00:005|1|2016-04-23 07:59:52|2016-04-23 07:59:52|托尔斯泰|托尔斯泰|2016-04-25 00:00:006|1|2016-04-23 08:03:42|2016-04-23 08:03:42|按时打算asda|阿斯达速冻|2016-04-25 00:00:007|1|2016-04-23 08:05:52|2016-04-23 08:05:52|asdasd|asdasdas|2016-04-25 00:00:008|1|2016-04-23 08:21:58|2016-04-23 08:21:58|autodisappear|autodisappear|2016-04-25 00:00:009|1|2016-04-23 08:39:20|2016-04-23 08:39:20|asd|asdasd|2016-04-25 00:00:0010|1|2016-05-01 15:26:08|2016-05-08 14:17:44|asd|asdasdasdasd|2016-05-16 00:00:00sqlite> select * fromarticle_tagwherearticle_id = 10;10|2|2016-05-01 15:26:08|2016-05-01 15:26:0810|3|2016-05-01 15:26:08|2016-05-01 15:26:08 
ログイン後にコピー

ほら、今再編集した記事はID番号10の記事で、記事名は asd と比較的単純明快です。編集ページでタグを削除したところ、2 つのタグがあることがわかりましたが、当然ながら 1 つのタグが残っています。

次に、記事 ID = 10 の select * from 記事タグを使用して、ID 10 の記事のタグを確認しました。見てください、まだ 2 つあり、タグ番号はそれぞれ 2 と 3 です。まだ削除されていないものが2つあります。なぜ?

理由を見つけてください

記事を更新する方法は、ArticleControlle.php の update() メソッドですよね。このメソッドを見てください。store() メソッドと比較すると、何かが欠けているように見えます。なぜなら、それらのプロセスは似ているからです。 store() メソッドでは、updat() メソッドよりも tags->attach() の処理が 1 つ多くなります。このステートメントを update() メソッドに追加して、機能するかどうかを確認してみましょう。

public function update($id,ArticleRequest $request){        $article=Article::findOrFail($id);        $article->update($request->all());        $article->tags()->attach($request->input('tag_list'));        return redirect('articles');    } 
ログイン後にコピー

次に、記事の更新ページに移動して、記事のタグを変更します。記事をもう一度確認すると、タグが多すぎることがわかります。 。 。

実際、よく考えてみると、この $article にはどのようなタグが付いているのでしょうか?これはinput(‘tag_list’)のタグであり、記事に対応する新しく編集したタグをデータベースに保存することに相当します。信じられない場合は、sqlit3 コマンドを使用して、編集したばかりの記事のタグをクエリできます。間違いなくもっとありました。

この考え方によれば、元のデータベースに保存されているタグを削除してから、新しいタグを追加する必要があります。はい、これがロジックです。

Laravel には、attach メソッドに加えて、attach のアンチメソッド detach もあり、指定したタグを削除することができますが、ここで説明するのは detach ではありません。について。

同期メソッド

上記の問題に直面した場合、私たちの解決策は、まずデータベース内の記事に対応するタグを削除してから、記事にタグを追加することです。最初にデタッチしてからアタッチするのと同じです。

しかし、Laravelにはsyncというメソッドもあります。敏感な学生なら、その正式名はすでに理解できます。そう、「同期」を意味する synchronize です。添付方法を直接同期に変更し、保存して記事を編集し、タグを変更して保存して再度記事を表示すると、すべてが通常の状態に戻ります:

public function update($id,ArticleRequest $request){        $article=Article::findOrFail($id);        $article->update($request->all());        $article->tags()->sync($request->input('tag_list'));        return redirect('articles');    } 
ログイン後にコピー

つまり、attach はラベルを追加するかラベルをバインドすること、detach はラベルを解放するかラベルを削除すること、sync はラベルを同期するかラベルを更新することです。

同様に、store() メソッドのattachをsyncに置き換えます。

概要

今日は小さな欠陥を解決し、アタッチとデタッチと同期の 3 つの方法を比較しました。

アタッチは記事にタグを追加、タグをバインド、タグを追加します

デタッチは指定したタグを記事にバインド解除し、タグを削除します

同期は記事にタグを付けるために使用されます タグは同期されています。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート