我正在尝试设置 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 我的 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/