php - laravel-tagging 在数据库中创建双条目

标签 php mysql laravel

我正在尝试设置 laravel-tagging 系统并让它在数据库中存储标签。但是,每次我提交带有标签的文章时,它都会创建两个条目:

 id    taggable_id   taggable_type    tag_name    tag_slug
'72',    '128',      
'73',    '72',      'App\Article',   'Newtag1',  'newtag1'

第一个条目 (id=72) 具有正确的 taggable_id,第二个条目 (id=73) 由 laravel-tagging 并自动将另一个 taggable_id 设置为 72,它从零开始计数并且表现得像自动递增。但是它在数据库模式中没有自动增量设置。

我是这样设置的:

1) 我创建了一个新的模型实例:

$article = new Article;

2) 然后我分配一个 taggable_id,它是使用标签创建的帖子的 ID:

$article->taggable_id = $postid;

3) 我将 $article 保存到数据库中:

$article->save();

4) 我通过 taggable_id 在数据库中找到保存的行并将其放入一个新的 $article 中:

$article = Article::where('taggable_id', $postid)->first();

5) 我运行 laravel-taggingtag 方法将标签放入数据库:

$article->tag($request->taggone);

6) 我再次保存该行

$article->save();

这给了我开头显示的复式条目。为什么会这样?我究竟做错了什么?我只是希望它使用原始条目来存储这些标签,而不是创建一个新条目。

编辑:我尝试跳过第 4 步,结果是一样的。

EDIT2 我的 Article 模型如下所示:

namespace App;

use Conner\Tagging\Taggable;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use Taggable;

    protected $table = 'tagging_tagged';

    public $timestamps = false;
}

最佳答案

看起来问题是因为您将 Article 模型上的 $table 属性设置为 tags 表,而它应该保留文章 表。

一般的想法是,在 laravel-tagging 的大部分情况下,一切都保持不变。唯一的区别是,如果您希望某个模型(例如 Article)支持标记,您需要做的就是添加 use Conner\Tagging\Taggable; 语句到你的模型。

然后您就可以像往常一样创建文章。例如

$article = new Article();
$article->title 'Test Article';
$article->body = 'Some article body';
$article->save();  // Should save it first before trying to tag

那么如果你想给文章加标签

$article->tag('Gardening');  // This will tag this article

您不必担心设置 tagging_tagged 表上的任何列,当您使用 tag() 时,扩展程序会为您处理。

关于php - laravel-tagging 在数据库中创建双条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253703/

相关文章:

javascript - vue.js 条件渲染中的数组子项

mysql - 在 MYSQL 中创建 BEFORE INSERT 触发器

php - 如何使用 mySQL 数据库将 HTML 放入 div

php - Laravel 更新多对多外键记录

php - 如何在 PHP 中通过重复字符拆分字符串?

mysql - 如何在 MySQL 中重置 AUTO_INCRMENT

laravel - Laravel 6.x 中的 URL 操作生成器

PHP array_key_exists 和 UTF 8

php - 将 MacOS 更新到 Mojave (10.14) 后,PECL 扩展安装失败

php - 通过php在mysql中实现事务