用户登录

在文章与标签之间创建多对多的关系,需要用到一个中间表 .. 这种表有个专门的名字叫 pivot table .. 比如对于我们要创建的标签跟文章之间的关系,添加一个 pivot table ,名字可以是 post_tag ..这个表上面,每条数据记录要包含文章的 id 号,还有所属的标签的 id 号 ..

pivot

下面可以用一个 migration 去创建这个数据表 ... 在命令行的下面,创建一个 migration ... 名字是 post_tag ..

再创建一个 seeder ... adonis make:seed .. 名字是 PostTagPivot ..

回到项目 ... 先找到创建的 migration ... 在 up 方法里面 .. 要创建的表的名字是 post_tag ...

里面用一下 table 的 integer ... 添加一个 post_id ... unsigned ... 它是正数 .. 再用 table.foreign ... 把 post_id 变成一个外键 ... references 关联的是 posts 表上的 id 字段的值 ..

同样方法再添加一个 tag_id 字段 ... foreign 是 tag_id . 关联的是 tags 里面的 id 字段的值 ..

去掉这个 timestamps ..

再找到 down 方法,回滚的时候要删除的表是 post_tag ..

seeder

下面可以再去设置一下对应的 Seeder 文件 ... 找到这个 PostTagPivotSeeder ... 这里我们可以使用 Database 上的方法插入点数据到这个 post_tag 数据表里 ..

先添加一个 Database ... 用一下 Database ..

在 run 方法里, await .. Database ... table 是 post_tag ... 再 insert 插入一组数据 ... 设置一下要插入的每个数据项目 .. 每个项目都需要一个 post_id ,值是文章的 id 号 ... 还需要一个 tag_id ... 它的值是对应的标签记录的 id 号 ...

下面我们可以分别给数据库里的文章打上一些标签 ...

注意这个 post_id 是 1 的这个文章,有两条记录 .. 一个 tag_id 是 2 ,一个 tag_id 是 1 ... 因为一个文章内容可以同时打上多个标签 ...

另外 post_id 是 6 的这个文章也有两个标签 ...

回到命令行 ... 先运行一下 migration ... adonis migration:run

完成以后再 seed 一下数据 ... adonis seed --files PostTagPivotSeeder.js

这里遇到了一个问题 .. 提示 cannot add or update a child row ... a foreign key constraint fails ..

引起这个错误的原因是设置数据记录外键的时候出现了问题 .. 比如可能这个外键的 id 值在相关的数据表上不存在 ..

回到数据库客户端 ... 我们可以检查一下 ..

看一下 posts 这个表 ..

你会发现这个表的 id 号是从 6 开始的 .. 不是从 1 开始的 .. 有可能这个表里之前有一些被删除的记录 ..

刷新一下显示 .. 应用的数据库里会有 post_tag 这个表 .. 现在这个表里还没有数据 ..

再回到项目 .. 我们可以修改一下这个 seeder 要插入到 post_tag 表里的数据 ..

修改一下 post_id 的值 ... 文章列表数据的 id 应该是从 6 开始 .. 修改一下这些记录上的 post_id 的值 ...

回到命令行 ... 再 seed 一下 PostTagPivotSeeder .. 成功以后 .. 回到数据库客户端 ..

再浏览一下 post_tag 表里的数据 ... 现在里面会有几条数据记录 ...

多对多关系:准备 pivot 数据表《 Node.js 应用:内容关系 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点