我正在尝试设置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
表,而它应该保留为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()
时,扩展将为您处理。
我建议你用这种方法做拉拉维尔标记:首先创建新闻模型
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);
}
}
这是你的网页
<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;