我正在尝试设置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
的{{1}}方法将标记放入数据库:
tag
6)我再次保存该行
$article->tag($request->taggone);
这给了我开头所示的双重输入。为什么会这样?我究竟做错了什么?我只是想让它使用原始条目来存储这些标签,而不是创建一个新标签。
编辑:我试过跳过第4步,结果是一样的。
EDIT2 我的$article->save();
模型如下所示:
Article
答案 0 :(得分:2)
看起来问题是因为您将$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()
时,扩展程序会为您处理。
答案 1 :(得分:1)
我建议您使用此方法进行laravel-tagging: 首先创建新闻模型
class News extends Model {
public function tags()
{
return $this->hasMany('App\Tag', 'news');
}
}
然后创建标签模型
class Tag extends Model {
public function getNews()
{
return $this->belongsTo('App\News', 'news');
}
}
之后你应该创建一个控制器来插入带有标签的新闻。
public function postCreate(Request $request)
{
//here you will insert your own datas
$news = new News();
$news -> description = $request->description;
$news -> title = $request->title;
$news -> save();
foreach ($request->tags as $t)
{
$tags = new Tag();
$tags->tag = $t;
$tags->lang = $request->lang;
$news->tags()->save($tags);
}
}
这是你的HTML
<form>
<input type="text" name="title"> <br>
<input type="text" name="description"> <br>
<input type="text" name="tags[]">
<input type="submit">
</form>
这是你的sql数据
CREATE TABLE IF NOT EXISTS `news` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`description` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `title` (`title`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL DEFAULT '0',
`news` int(11) NOT NULL DEFAULT '0',
`lang` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;