Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel标记在数据库中创建两个条目_Php_Mysql_Laravel - Fatal编程技术网

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。我花了三天时间把头撞在墙上寻找解决办法,事情就是这么简单。你有我深深的鞠躬,谢谢你!