【发布时间】:2016-07-10 21:30:43
【问题描述】:
我创建了一个新数据库并添加了一些外键,因为在此之前我的数据库中没有这个,而且我的整个网页都出现了很多问题。这就是为什么我决定创建一个新的数据库,其中包含我所有的外键需要。
现在我在我的网页上创建了一个新用户并且它可以工作。但是如果我尝试与该用户创建一个线程,我会收到以下错误消息:
SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(Laravel.threads,CONSTRAINT threads_ibfk_2 FOREIGN KEY(themen_id)参考themes (id)) (SQL: 插入threads (themen_id, thread, content, user_id, updated_at, created_at) 值 ({id}, unicorn, rainbows, 1 , 2016-03-23 14:11:23, 2016-03-23 14:11:23))
在此错误之下,再次出现几乎相同的错误:
SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(Laravel.threads,CONSTRAINT threads_ibfk_2 FOREIGN KEY(themen_id)参考themes (id))
嗯,我不知道这是什么意思。我希望你们中的某个人可以在那里帮助我。
这就是我创建表格的方式:
CREATE TABLE threads
(
id int AUTO_INCREMENT PRIMARY KEY,
user_id int NOT NULL,
themen_id int NOT NULL,
thread varchar (120),
content varchar (1200),
created_at timestamp,
updated_at timestamp,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (themen_id) REFERENCES themes(id)
);
CREATE TABLE comments
(
id int AUTO_INCREMENT PRIMARY KEY,
thread_id int NOT NULL,
user_id int NOT NULL,
comment text,
created_at timestamp,
updated_at timestamp,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (thread_id) REFERENCES threads(id)
);
CREATE TABLE themes
(
id int AUTO_INCREMENT PRIMARY KEY,
thema text,
created_at timestamp,
updated_at timestamp
);
CREATE TABLE users
(
id int(10) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
email VARCHAR(255),
password VARCHAR(60),
remember_token VARCHAR(100),
created_at timestamp,
updated_at timestamp
);
我正在使用 Laravel,当然我已经更改了 .env 文件中的数据库名称。好吧,我现在真的不知道该做什么。
有什么帮助吗?
谢谢!
【问题讨论】:
-
themen_id需要整数,但错误表明您发送了字符串{id}。 -
该错误表明您正在尝试使用
themen_id值在themes中不存在的threads中插入一条记录。外键约束的存在是为了防止你这样做。 -
没有 id = {id} 的“主题”,这是您传递的内容,这就是外键应该引用的内容。
标签: php sql database laravel-5 foreign-key-relationship