我正在尝试设置laravel-tagging,这似乎是Laravel最受欢迎的标记系统。但不幸的是,它没有任何前端功能。我完全遵循了guide。最后,我在尝试创建标记时遇到错误:
SQLSTATE [23000]:完整性约束违规:1048列 'taggable_id'不能为空(SQL:插入
tagging_tagged
(tag_name
,tag_slug
,taggable_type
,taggable_id
)值 (奶酪,奶酪,App \ Links,))
我发现了其他一些人员遇到类似错误的帖子,例如this,this和this。但它们都没有提供明确的解决方案。人们和常识说,应该保存包含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自动填充标签。一旦我完成所有工作,我将更新这个问题。
答案 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();