laravel 迁移、填充、模型

目录

一、迁移文件

1、创建迁移文件

2、编写迁移文件

3、创建迁移记录表

4、执行迁移文件-创建数据表

5、执行迁移文件-删除数据表

二、填充文件

1、创建填充文件

2、编写填充文件

3、执行填充文件

三、模型文件

1、创建模型文件

2、编写模型文件

五、查询数据表

六、命令汇总

1、迁移文件

2、填充文件

3、模型文件


一、迁移文件

       编写迁移文件的目的是为了将产生数据表的操作通过文件形式记录下来,这样在项目发生迁移的时候可以方便的产生和原来一样的数据表。做到 “一次编写,到处使用”。

       目录位置:database/migrations

1、创建迁移文件

php artisan make:migration create_article_table

php artisan make:migration create_user_table

       执行迁移命令,生成以下两个文件:

              yyyy_mm_dd_xxxxxx_create_article_table.php

              yyyy_mm_dd_xxxxxx_create_user_table.php

2、编写迁移文件

(1)yyyy_mm_dd_xxxxxx_create_article_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticleTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('article', function (Blueprint $table) {
            $table->increments('id');                              //article_id, primary_key
            $table->string('article_name', 100)->notNull(); //article_name
            $table->tinyInteger('author_id')->notNull();           //author_id
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('article');
    }
}

(2) yyyy_mm_dd_xxxxxx_create_user_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAuthorTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('author', function (Blueprint $table) {
            $table->increments('id');                            //author_i, primary_key
            $table->string('author_name', 20)->notNull(); //author_name
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('author');
    }
}

3、创建迁移记录表

       如果是第一次执行迁移文件,则需要先创建记录表,执行以下命令,会自动在数据库中创建 migration 表。

php artisan migrate:install

       migration 表包含了 id、migration、batch 三个字段,分别代表 主键、创建的表、创建批次。该表会在迁移文件的执行过程中自动维护,不需要用户干预。下表为执行迁移文件创建数据表后的 migration 表。

4、执行迁移文件-创建数据表

php artisan migrate

5、执行迁移文件-删除数据表

php artisan migrate:rollback

二、填充文件

       编写填充文件的目的:一是为了向数据表中填充数据,以便用于测试或者从其他数据库导入初始数据;二是将填充数据的操作记录下来,随项目迁移,以便一次记录,多次使用。

       目录位置:database/seeds

1、创建填充文件

php artisan make:seeder ArticleAndAuthorTableSeeder

2、编写填充文件

       ArticleAndAuthorTableSeeder.php

<?php

use Illuminate\Database\Seeder;

class ArticleAndAuthorTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // article 表
        DB::table('article')->insert([
            [
                'article_name'  =>  '西游记',
                'author_id'     =>  rand(1,3)
            ],
            [
                'article_name'  =>  '射雕英雄传',
                'author_id'     =>  rand(1,3)
            ],
            [
                'article_name'  =>  '神雕侠侣',
                'author_id'     =>  rand(1,3)
            ]
        ]);
        // author 表
        DB::table('author')->insert([
            [
                'author_name'   =>  '古龙'
            ],
            [
                'author_name'   =>  '金庸'
            ],
            [
                'author_name'   =>  '吴承恩'
            ]
        ]);
    }
}

3、执行填充文件

       执行后会向数据表中填充数据,以便用于测试或者填入原始数据。

php artisan db:seed --class=ArticleAndAuthorTableSeeder

三、模型文件

       使用 迁移文件 和 填充文件,完成了数据表的创建和初始数据的填入,主要是为了便于随项目迁移,实则是可有可无。也可以编写通过 sql 命令或脚本的形式,通过 sql 客户端创建表和填充数据。

       除了使用 DB 门面与数据库交互,还可以通过模型与数据库交互。使用模型需要首先定义一个模型类,并绑定到对应的数据表。使用模型的好处:

(1)在模型类中可以对数据表进行一些设置,对访问进行一些限制;

(2)可以通过编写关联方法,进行模型之间的关联,以便于替代 join、leftjoin,以简单的语句实现复杂的联表查询。

       目录位置:模型文件默认目录为 app,为了清晰目录,一般在 app 下自定义一个 Models 目录作为模型位置,因此习惯将目录设置为 app/Models。

1、创建模型文件

php artisan make:model Models/Article     # 创建模型文件
php artisan make:model Models/Author     # 创建模型文件

2、编写模型文件

(1)app/Models/Article.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    /*
        id              文章id
        article_name    文章name
        author_id       作者id(关联键)
    */
    protected $table = 'article';                               # 绑定数据表
    public $timestamps = false;                                 # 不创建时间戳
    //protected $fillable = ['article_name', 'author_id'];      # 可写白名单,限制可写字段
}

(2)app/Models/Author.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Author extends Model
{
    /*
        id              作者id(关联键)
        author_name     作者name
    */
    protected $table = 'author';                    # 数据表绑定
    public $timestamps = false;                     # 不适用时间戳字段
    //protected $fillable = ['author_name'];        # 可写白名单
}

五、查询数据表

       定义路由和编写控制器方法,在控制器中声明模型后,可以通过两种模型调用方式与数据表交互:静态调用模型(静态方法)、动态调用模型(通过实例化对象),此外还可以通过直接使用 DB门面 与数据库交互。

       模型的静态调用、动态调用效果是一样的。但是 模型方法 和 DB门面 的调用有区别。

<?php

namespace App\Http\Controllers\Home;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use App\Models\Article;
use App\Models\Author;

class SelectController extends Controller
{
    //获取数据的区别:模型(伪二维数组/伪数组对象) 和 DB门面(伪对象数组)
    //总结:
    //  DB比较原始,所以是伪对象数组;
    //  模型比较先进,所以是伪对象数组,也是伪二维数组。
    public function test1(){

        //模型
        $data = Article::get();           //        同 $data = (new Article())->get();
        dump($data);                      //集合->数组[5]->对象(包含表结构属性)->数组(包含数据属性)。  伪二维数组 / 伪数组对象
        dump($data->toArray());           //数组[5]->数组(包含数据属性)。                           真二维数组
        dump($data->toArray()[0]);        //数组
        dump($data->toArray()[0]['id']);  //属性

        //模型:伪二维数组
        //在不转化为数组的情况下,可以在 laravel 中直接当二维数组用
        //只不过是 laravel 帮我们做了处理,如果传递到前端,还是要转化数组
        dump($data[0]);            //数组(记录),既可以看作对象,又可以看作数组
        dump($data[0]['id']);      //元素(属性),获取数组的元素
        dump($data[0]->id);        //成员(属性),获取对象的成员

        echo '----------------------------------------------------------------------<br>';

        // +号是可见属性,可获取;
        // #号是不可见属性,不可获取。

        //DB门面
        $data = DB::table('article')->get();
        dump($data);                           //集合->数组[5]->对象(包含数据属性)。      伪对象数组
        dump($data->toArray());                //数组[5]->对象(只包含数据属性)。          真对象数组
        dump($data->toArray()[0]);             //对象
        dump($data->toArray()[0]->id);         //属性

        //DB门面:伪对象数组
        dump($data[0]);         //对象(记录)
        dump($data[0]->id);     //属性(属性)
    }
}

六、命令汇总

1、迁移文件

php artisan make:migration create_article_table # 创建迁移文件yyyy_mm_dd_xxxxxx_create_article_table.php
php artisan make:migration create_author_table  # 创建迁移文件yyyy_mm_dd_xxxxxx_create_author_table.php

php artisan migrate:install                     # 创建迁移记录表 migration(第一次用)

php artisan migrate            # 创建数据表 article、author

php artisan migrate:rollback   # 删除数据表

2、填充文件

php artisan make:seeder ArticleAndAuthorTableSeeder  # 创建填充器文件 ArticleAndAuthorTableSeeder.php

php artisan db:seed ArticleAndAuthorTableSeeder      # 执行填充器文件,填充数据,可以多个表一起填充

3、模型文件

php artisan make:model Models/Article     # 创建模型文件 Article.php
php artisan make:model Models/Author      # 创建模型文件 Author.php

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值