Php laravel标记在数据库中创建两个条目
我正在尝试设置Php laravel标记在数据库中创建两个条目,php,mysql,laravel,Php,Mysql,Laravel,我正在尝试设置laravel标签系统并让它将标签存储在数据库中。但是,每次我提交带有标记的文章时,它都会创建两个条目: id taggable_id taggable_type tag_name tag_slug '72', '128', '73', '72', 'App\Article', 'Newtag1', 'newtag1' 第一个条目(id=72)具有正确的taggable\u id,第二个条目(id=73)由larav
laravel标签系统
并让它将标签存储在数据库中。但是,每次我提交带有标记的文章时,它都会创建两个条目:
id taggable_id taggable_type tag_name tag_slug
'72', '128',
'73', '72', 'App\Article', 'Newtag1', 'newtag1'
第一个条目(id=72
)具有正确的taggable\u id
,第二个条目(id=73
)由laravel tagging
自动创建,并自动将另一个taggable\u id
设置为72
,该条目自零开始计数,其行为类似于自动递增。但它在数据库模式中没有自动递增设置
下面是我如何设置它的:
1) 我创建了一个新的模型实例:
$article = new Article;
2) 然后我分配一个taggable_id
,它是使用标记创建的帖子的id:
$article->taggable_id = $postid;
3) 我将$article
保存到数据库中:
$article->save();
$article->tag($request->taggone);
4) 我通过taggable\u id
在数据库中找到保存的行,并将其放入新的$article
:
$article = Article::where('taggable_id', $postid)->first();
5) 我运行laravel tagging
的tag
方法将标签放入数据库:
$article->save();
$article->tag($request->taggone);
6) 我再次保存该行
$article->save();
这给了我开头显示的复式输入。为什么会这样?我做错了什么?我只希望它使用原始条目来存储这些标签,而不是创建一个新的标签
编辑:我尝试跳过步骤4,结果是一样的
EDIT2我的文章
模型如下所示:
namespace App;
use Conner\Tagging\Taggable;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
use Taggable;
protected $table = 'tagging_tagged';
public $timestamps = false;
}
我建议您使用此方法进行laravel标记: 首先创建新闻模型
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>
问题似乎是因为您将
文章
模型上的$table
属性设置为标记
表格,而该表格应保留为文章
表格
总的想法是,通过laravel标记
,大多数情况下一切都保持不变。唯一的区别是,如果您希望某个模型(如文章
)支持标记,则只需添加使用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\u taged
表上的任何列,当您使用tag()
时,扩展将为您处理这一问题。为什么需要步骤3和步骤4?完全创建标记实例一次,然后将其保存到数据库。@karanpmuiya如果我不保存它,我会得到一个错误完整性约束冲突:1048列“taggable_id”不能为null
。我甚至提出了一个关于它的问题,唯一的办法就是在使用tag
函数之前保存它。你能给我们看一下你的文章
模型吗?@user3158900当然,我用模型更新了我的问题,这就是我认为出了问题的地方。该表不应带有标签
。它应该是articles
或任何您存储文章的表格。我刚刚拥有了facepalm历史上最大的facepalm。我花了三天时间把头撞在墙上寻找解决办法,事情就是这么简单。你有我深深的鞠躬,谢谢你!