在一个表中创建两个外键

时间:2018-03-10 13:57:33

标签: mysql

我试图在一个表中创建两个外键但是我收到以下错误消息:#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;

3 个答案:

答案 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';
}