一个数据记录关联另外一个唯一的数据记录,这个就是数据之间的一对一的关系。比如在我们的应用里,一个用户记录,可以关联一个唯一的资料档案数据记录 .. 在这个档案数据记录上可以存储用户的一些社交网络帐号之类的数据 .. 然后使用用户 id 来指定这个档案数据所属的那个用户数据记录 ..
我们先在应用里面去添加一个新的可以存储用户档案的数据表 .. 然后在里面可以添加点演示用的数据 .. 回到命令行 .. 先去创建一个 Migration ..
adonis make:migration profile
选择创建表 ..
下面可以给这个表再去创建一个对应的模型 ...
adonis make:model profile
再添加一个 seeder ..
adonis make:seed profile
再回到项目 .. 在 database .. migrations 里面,可以找到刚才我们创建的 migration .. 它会创建一个叫 profiles 的数据表 .. 它里面可以存储用户的资料档案 ..
里面再用一个 table 的 string .. 添加一个叫 github 的字段 .. 可以用它存储用户的 github 帐号 .. 你可以继续添加其它的字段来存储用户的资料档案 ..
下面我们要再添加一个关联字段 .. 用一下 table 的 interger ,字段的名字可以是 user_id .. 用一下 unsigned ,表示这个整数字段里面的值是正数的 .. 这个字段里面可以存储当前档案记录所属的用户是谁 ..
然后再用一下 table 的 foregin ,把 user_id 作为这个表的一个 foregin key ,就是外键 .. references ... 相关的就是 users 表里的 id 这个字段 ..
不过这里我们可以故意制造一个错误 .. 看看这样在运行 Migration 的时候会发生什么 .. 把这个 references 设置成 user 表里的 id ..
seeder
下面再去编辑一下 Profile 这个 seeder .. 在 seeds 这个目录的下面,可以找到刚才我们用在命令行下面创建的这个 ProfileSeeder ...
先把需要用的 Profile 这个模型导入进来 .. 位置是 App .. Models .. Profile
然后在它的 run 方法里面 .. 添加一个 profiles .. 一个数组 .. 里面添加两个项目 .. 每个项目都是一个对象 .. 里面添加一个 github .. 设置一下用户的 github 帐号 .. 再添加一个 user_id .. 设置一下对应的用户数据记录的 id 号 .. 比如让这条档案数据属于 id 号是 1 的用户 ..
再添加一条档案记录 .. 修改一下 github 字段的值 .. 这条档案记录属于 id 号是 2 的用户 ..
下面再 await .. 用一下 Profile 模型的 createMany .. 创建多条记录 .. 值就是上面定义的 profiles ..
执行
回到命令行 .. 先运行一下 migration .. adonis migration:run .. 这里会提示不能创建表 .. 因为在设置这个表的 foreign key 的时候出现错误了 ..
回到项目 .. 找到 profile 这个 migration ... 修改一下 references .. 这里应该相关联的是 users 表里的 id ,不是 user 表里的 id ... 我们的数据库里没有 user 这个表 ..
再去运行一下 migration ...
这次会提示 profiles 这个表已经存在了 .. 虽然上一次运行的时候出现了错误 .. 但还是创建了这个表 ..
这回再试着 rollback 一下,看看能不能恢复上一次运行的 migration ..
你会发现, rollback 的是 posts_add_content_column 这次 migration ... 并不是 profile 这个 migration ...
再运行一下 migration ..
又会提示 profiles 表已经存在了 ..
查看一下 migration 的状态 ... 提示这个 profile migration 还没有被 migrated ..
所以解决这个问题的方法就只能是手工到数据库里面把已经创建了的 profile 这个表从数据库里删除掉 ..
打开数据库数据端 ... 连接一下数据库 ..
找到应用使用的数据库 .. 把它里面的 profiles 这个表删除掉 .. Drop table ... 成功以后,再回到命令行 .. 重新再运行一下 migration ..
这回就会提示运行成功了 ..
下面再运行一下 seed ..
执行一下 adonis seed --files ProfileSeeder.js ..
完成以后再到数据库客户端这里检查一下 .. 浏览一下 profiles 数据表里的东西 ... 你会看到这里有两条数据记录 .. github 是用户的 github 网站的帐号 .. user_id 是这条档案记录所属的用户的 id 号 ..
这条记录说明了它所属的 user_id 是 1 ... 在浏览一下 users 表里的内容 ... 找到 id 号是 1 的这条用户数据记录 ... 这条记录的 username 是王皓 ..