我正在尝试设置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-tagging
的tag
方法将标记放入数据库:$article->tag($request->taggone);
6)我再次保存行
$article->save();
这给了我一个开头显示的双条目。为什么会这样?我做错什么了?我只希望它使用原始条目来存储这些标记,而不是创建新的标记。
编辑:我试过跳过第4步,结果是一样的。
EDIT2 My
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;
}
最佳答案
问题似乎是因为您将$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()
时,扩展将为您处理这些列。