laravel 联表查询

联表查询得有两张有联系的数据表,(除了自己连接自己的,自联查询)


案例:创建两个表,进行关联查询(使用laravel的数据迁移)

	创建两个表,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表里就有填充的文件了
laravel 联表查询_第1张图片
laravel 联表查询_第2张图片


然后进行联表查询:


链表的方式: 内联和外联(左外联,右外联)
用链式操作进行链接:
(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);
}

(3)直接访问,就可以查询到内容了
laravel 联表查询_第3张图片

你可能感兴趣的:(laravel 联表查询)