联表查询得有两张有联系的数据表,(除了自己连接自己的,自联查询)
创建两个表,article表和author表。
(1)使用php artisan的命令创建迁移文件
在laravel文件目录下打开命令行窗口,输入下面命令,回车。
//创建article表迁移文件
#php artisan make:migration create_article_table
//创建author表迁移文件
#php artisan make:migration create_author_table
(2)编写两个迁移文件的代码
在create_article_table的迁移文件中的up方法里写入下面创建表的字段
public function up()
{
Schema::create('article', function (Blueprint $table) {
//主键自增
$table->bigIncrements('id')->comment('主键');
//作者名字,vachar类型,字段长度50,唯一
$table->string('article_name',50)->unique()->comment('文件名称');
//作者的id
$table->tinyInteger('author_id')->comment('作者id');
});
}
在create_author_table的迁移文件中的up方法里写入下面创建表的字段
public function up()
{
Schema::create('author', function (Blueprint $table) {
//主键自增
$table->bigIncrements('id')->comment('主键');
//作者名字
$table->string('author_name')->comment('作者name');
});
}
上面两个迁移文件up方法中编写的id是相互关联的!
(3)执行生成数据表的迁移文件
命令行窗口输入:php artisan migrate
执行以后,数据表中就会有article和author表,并且有上一步在迁移文件里写的字段
(4)模拟数据的填充(通过填充器来实现)
创建填充器文件:
在项目的命令行窗口中编写创建填充器代码:php artisan make:seeder ArticleAndAuthorTableSeeder
创建完成以后,在databases/seeds/里有刚创建的文件(ArticleAndAuthorTableSeeder)。
打开编写,进行模拟数据的填充:
public function run()
{
//article里进行数据填充
DB::table('article')->insert(
[
[
'article_name' =>'怎么保养皮肤',
'author_id' =>rand(1,5),
],
[
'article_name' =>'怎么减肥',
'author_id' =>rand(1,5),
],
[
'article_name' =>'自律给我自由',
'author_id' =>rand(1,5),
],
[
'article_name' =>'学霸养成记',
'author_id' =>rand(1,5),
],
]
);
//author表里进行数据填充
DB::table('author')->insert(
[
[
'author_name' =>'张三',
],
[
'author_name' =>'李四',
],
[
'author_name' =>'王五',
],
[
'author_name' =>'刘六',
],
]
);
}
填充完以后,执行填充器文件,命令行输入:php artisan db:seed --class=ArticleAndAuthorTableSeeder
执行完以后,article表里和author表里就有填充的文件了
链表的方式: 内联和外联(左外联,右外联)
用链式操作进行链接:
(1)创建路由;
//联表查询
Route::get('duobiaoselect','TestController@duobiaoselect');
(2)编写控制器代码;
//联表查询
public function duobiaoselect(){
/*
把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;
语法:DB门面 -> join联表方式名称小驼峰写法(关联的表名,表1的字段,运算符,表2的字段)
*/
$data=DB::table('article as t1')
->select('t1.id','t1.article_name','t2.author_name')
->leftjoin('author as t2','t1.author_id','=','t2.id')
->get();
dump($data);
}