Table des matières
标签同步
数据库检查
找原因
sync 方法
总结
Maison développement back-end tutoriel php [Laravel 5 Fundamentals] 23 – Syncing Tags

[Laravel 5 Fundamentals] 23 – Syncing Tags

Jun 20, 2016 pm 12:29 PM

标签同步

前言

上一节,我们在 UI 上实现对 tag 的选择,并且可以创建多个 tag 。但是有瑕疵,今天我们就来看看瑕疵是什么,并解决它。

说明

开发环境: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 
Copier après la connexion

你看哈,我刚才重新编辑的文章是 id 号为 10 的文章,文章名为 asd ,比较朴实无华。在编辑页删了一个标签,原来有两个,还剩一个按理说。

然后我又通过 select * from article tag where articleid = 10 查询了一下 id 为 10 的文章的标签,你看哈,还是两个,他们的标签号分别为 2 和 3 。还是两个,没删掉。为什么呢?

找原因

文章更新的方法是 ArticleControlle.php 里的 updat() 方法,对吧?看一下该方法,相比较 store() 好像少了点什么,为什么跟 store() 方法比较,因为他们的过程差不多。在 store() 方法中比 updat() 方法多了一个 tags->attach() 这个过程。我们试试把该语句添加到 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');    } 
Copier après la connexion

再去文章更新的页面修改一下文章的标签,保存之后再查看文章,发现标签多了。。。

其实细想一下,这个 $article 的 tags attach 的是什么?是 input(‘tag_list’) 里面的标签,相当于又把新编辑的对应该文章的标签存到了数据库。不信的话,你再通过 sqlit3 命令去查询一下你刚才编辑的文章的 tag 。肯定变多了。

按照这个思路的话,我们需要把原数据库中存储的 tag 进行删除,然后再添加新的标签,没错,就是这个逻辑。

Laravel 里除了 attach 这个方法外,还有 attach 的反方法 detach ,通过 detach 我们可以删除指定的标签,你可以做个实验,不过 detach 不是我们要讲的。

sync 方法

面对上面的瑕疵,我们的解决思路是先删干净数据库里文章对应的 tag , 然后再给文章添加 tag 。相当于,我们先 detach ,然后再 attach 。

不过, Laravel 还有一个方法叫 sync 。敏感的同学已经能脑补它的全称了,没错 synchronize ,“同步” 的意思。当你把 attach 方法直接修改为 sync ,保存后再编辑文章,修改标签,保存再查看文章,一切都恢复正常了:

public function update($id,ArticleRequest $request){        $article=Article::findOrFail($id);        $article->update($request->all());        $article->tags()->sync($request->input('tag_list'));        return redirect('articles');    } 
Copier après la connexion

所以说, attach 是添加标签,或者绑定标签; detach 是解除标签,或删除标签; sync 是同步标签,或者说是标签的更新。

同理,把 store() 方法里的 attach 也换成 sync 。

总结

今天解决了一个小瑕疵,并对比了三种方法,分别是 attach detach 和 sync 。

attach 就是给文章添加 tag ,绑定 tag ,追加 tag

detach 就是给文章解绑指定的 tag ,删除 tag

sync 就是用来对文章的 tag 进行同步的。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifie la gestion des données de session temporaires à l'aide de ses méthodes de flash intuitives. Ceci est parfait pour afficher de brefs messages, alertes ou notifications dans votre application. Les données ne persistent que pour la demande ultérieure par défaut: $ demande-

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Laravel fournit une syntaxe de simulation de réponse HTTP concise, simplifiant les tests d'interaction HTTP. Cette approche réduit considérablement la redondance du code tout en rendant votre simulation de test plus intuitive. L'implémentation de base fournit une variété de raccourcis de type de réponse: Utiliser illuminate \ support \ faades \ http; Http :: faux ([[ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

Expliquez le concept de liaison statique tardive en PHP. Expliquez le concept de liaison statique tardive en PHP. Mar 21, 2025 pm 01:33 PM

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Mar 28, 2025 pm 05:11 PM

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.

Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Mar 28, 2025 pm 05:12 PM

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.

See all articles