我试图在一个表中创建两个外键但是我收到以下错误消息:#1215 - 无法添加外键约束
这是我的SQL查询:
CREATE TABLE `files` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`users_id` int(12) unsigned NOT NULL,
`users_name` varchar(50),
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`size` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (users_id) REFERENCES users (id),
FOREIGN KEY (users_name) REFERENCES users (name)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
答案 0 :(得分:0)
检查您指向的列是否为主键
FOREIGN KEY (users_name) REFERENCES users (name)
检查名称是否为主键。
答案 1 :(得分:0)
@NiamhFlannery首先,你不要使用laravel迁移。
你不需要在这个表中使用user_name你可以通过加入表来获取它。
您可以在模型中使用关系
在用户模型中,您可以指定hasMany(),在文件模型中,您可以指定belongsTo()。
答案 2 :(得分:0)
用户模型
public function files()
{
return $this->hasMany('FilesModels', 'user_id', 'id);
}
文件模型
public function user()
{
return $this->belongsTo('User', 'user_id');
}
获取记录时
$files = Files::with('user')->select(*)->get();
如果您返回上述查询数据,您将找到包含每条记录的用户对象。
您可以使用
访问相同内容@foreach($files as $key => $file)
{
echo "user id = " . $file->user->id .' \n';
echo "user name = " . $file->user->user_name .' \n';
}