完整性约束违规:1048列'taggable_id'不能为空

时间:2016-05-10 08:18:20

标签: php mysql laravel

我正在尝试设置laravel-tagging,这似乎是Laravel最受欢迎的标记系统。但不幸的是,它没有任何前端功能。我完全遵循了guide。最后,我在尝试创建标记时遇到错误:

  

SQLSTATE [23000]:完整性约束违规:1048列   'taggable_id'不能为空(SQL:插入tagging_tagged   (tag_nametag_slugtaggable_typetaggable_id)值   (奶酪,奶酪,App \ Links,))

我发现了其他一些人员遇到类似错误的帖子,例如thisthisthis。但它们都没有提供明确的解决方案。人们和常识说,应该保存包含taggable_id的模型,以便将标记存储在数据库中。我的控制器代码如下所示:

public function storeStuff(Request $request)
{
    // Create the link first
    $link = new Links;

    // Now add tags
    $link->tag(explode(',', $request->tags));

    // Try to save tags?
    $link->save();
}

我在我的案例中使用$link->save();保存它的尝试不起作用。我仍然得到相同的错误,我的数据库表tagging_tagged,其中包含taggable_id列仍然是空的。有没有人对如何处理这个问题有任何建议?

编辑:我按照Tobias Karlsson的建议添加了另一项保存工作:

    $link = new Links;
    $link->tag_name = $request->tags;
    $link->save();

    // Now add tags
    $link->tag(explode(',', $request->tags));

    $link->save();

我还必须添加时间戳来修复丢失的created_at错误。时间戳不包含在laravel-tagging包附带的初始迁移中,即使我不确定它们是否对标记有用。我的tagging_tagged表现在看起来像这样:

FIELD         TYPE              NULL   KEY
id            int(10)unsigned   NO     PRI      auto_increment
taggable_id   int(10)unsigned   NO     MUL      
taggable_type varchar(255)      NO     MUL      
tag_name      varchar(255)      NO          
tag_slug      varchar(255)      NO     MUL      
created_at    timestamp         YES         
updated_at    timestamp         YES         

我仍然试图让Javascript自动填充标签。一旦我完成所有工作,我将更新这个问题。

3 个答案:

答案 0 :(得分:4)

您必须先保存模型,然后设置标签,然后重新保存。

$link = new Links;
$link->someProperty = $request->someProperty;

// Save model to get a taggable_id (model id).
$link->save();

// Now add tags
$link->tag(explode(',', $request->tags));

// Save tags.
$link->save();

答案 1 :(得分:1)

你必须在表结构中为taggable_id设置var styles = StyleSheet.create({ androidPicker: { color: '#6D6D6D', backgroundColor: '#FFF', marginBottom: 20, height: 40, alignSelf: 'stretch', alignItems:'center', justifyContent:'center', } }) ,否则你必须像这样在查询中添加NULL。

DEFAULT NULL

答案 2 :(得分:0)

这可能来晚了,但对其他尝试在其工作中实施标记的人应该有所帮助。如果您已经了解Laravel-tags,那么您可能会发现他们的解释存在空白,以及他们如何使像我这样的外行人难以理解他们的包裹。取Tobias Karlsson的样本(上图)并进行修改。

$link = new Links;

//you shouldn't add any tag property in the line below
$link->someProperties = $request->someProperties;

//save model to get taggable_id (model_id)
$link->save();

//now add tags
$link->attachTags(['tag1','tag2','tag3']);
$link->save();