【发布时间】:2016-09-05 02:19:33
【问题描述】:
我正在尝试设置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 自动填充标签。一旦一切正常,我会更新这个问题。
【问题讨论】:
-
我认为
taggable_id是外键,您不能输入相同的NULL 数据。因此,要么删除约束,要么为该列添加一些值。 -
taggable_id是主键吗?您能否粘贴以下 SQL 查询的输出:DESCRIBE tagging_tagged -
基本上你正在尝试标记一个还没有
id的资源。您必须先保存它,以获得 id,然后尝试添加标签。