我正在尝试设置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 MyArticle模型如下:
namespace App;

use Conner\Tagging\Taggable;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use Taggable;

    protected $table = 'tagging_tagged';

    public $timestamps = false;
}

最佳答案

问题似乎是因为您将$table模型上的Article属性设置为tags表,而它应该保留articles表。
总的来说,对于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()时,扩展将为您处理这些列。

09-18 00:10