十五、联表查询
联表要求至少得有2张表(除了自己连接自己,自联查询),并且还是存在关系的两张表。
例如:可以建立2张表:文章表、作者表【以目前比较火的网站:知乎】。
文章表(article):
Id 主键
Article_name 文章名称,varchar(50),notnull
Author_id 作者(作者id),int,notnull
作者表(author):
Id 主键
Author_name 作者名称,varchar(20),notnull
①创建迁移文件
#php artisan make:migration create_article_table
#php artisan make:migration create_author_table
②相继编写2个迁移文件的代码
文章表的迁移代码:
作者表的迁移代码:
③执行生成数据表的迁移文件
#php artisan migrate
④模拟数据(通过填充器来实现)
a. 创建填充器文件可以将多个数据表的写入操作写在一起
b. 编写数据模拟的代码
提示:填充器的模拟数据,可以参考“文件”文件夹中的数据。
c. 需要执行填充器文件
#php artisan db:seed --class=ArticleAndAuthorTableSeeder
数据表的结果:
案例:要求查询数据表(文章表、作者表),查询出文章的信息包含了作者名称
联表查询一共有:内连接(inner)、左连接(left)、右连接(right)。
原始的sql语句:【左外连接】
表:文章表(article)主 t1、作者表(author)从 t2
关联关系:t1.author_id = t2.id
原生的sql:select t1.id,t1.article_name as article_name,t2.author_name as author_name from article as t1 left join author as t2 on t1.author_id = t2.id;
执行结果:
将上述的sql语句改成链式操作:
语法:DB门面 -> join联表方式名称小驼峰写法(关联的表名,表1的字段,运算符,表2的字段)
a. 创建需要的路由
b. 创建test15方法,实现将sql语句改写成链式操作实现刚才的案例效果
显示结果: