artisan.md 11.2 KB

Artisan命令行

artisan提供的帮助

在Laravel&Lumen中,artisan命令行是一个非常重要的工具,平常使用到的有:

artisan 命令帮助 在命令行中,可以通过php artisan或者php artisan list来查看Artisan命令所支持的命令

命令前面加上help可以显示帮助界面: php artisan help migrate

参考: artisan命令行


1. make:migration

生成数据库迁移命令,命令示例:

`php artisan make:migration create_some_table --table=table_name`

`php artisan make:migration add_column_to_table --table=table_name`

`php artisan make:migration alter_column_to_table --table=table_name`

以上命令是让框架在database/migrations目录下生成migration文件。文件格式如下:

`2016_04_21_143315_create_user_login.php`

通过编写生成的文件,我们可以控制数据库的结构和数据,相关示例:

文件中内容相关示例:

  • 创建数据表

    class CreateBrand extends Migration
    {
        public function up()
        {
            Schema::create('brand', function (Blueprint $table) {
                $table->engine = 'InnoDB';
                $table->increments('brand_id');
                $table->string('app_id',30)->comment('集团联盟ID');
                $table->string('brand_name',100)->comment('品牌名称');
                $table->string('brand_pic',100)->comment('图片');
                $table->timestamps();
            });
        }
    
        public function down()
        {
                Schema::drop('brand');
        }
    }
    
  • 修改数据字段

    class RenameColumnForCart extends Migration
    {
        public function up()
        {
            Schema::table('cart_default', function (Blueprint $table) {
                $table->renameColumn('spd_common_id', 'spd_detail_id');
            });
        }
        public function down()
        {
            Schema::table('cart_default', function (Blueprint $table) {
    
            });
        }
    }
    
  • 添加数据字段

    class AddCustomerIdColumnToBuyer extends Migration
    {
        public function up()
        {
            Schema::table('buyer', function (Blueprint $table) {
                $table->string('customer_id')->after('buyer_id')->comment('会员ID,从CRM获得');
            });
        }
    
        public function down()
        {
            Schema::table('buyer', function (Blueprint $table) {
                $table->dropColumn('customer_id');
            });
        }
    }
    

2.migrate

将make:migration所生成的数据库迁移文件反映到数据库中。

参考:数据迁移

相关命令:

  • php artisan migrate

    对于这个命令,数据库中都会生成migration数据表,表中的数据行设置了哪些文件已经被迁移了.laravel只会对新的文件执行迁移动作(文件内定义的up函数),表中所记录的文件将不会被执行迁移动作。 当新的文件被执行完成后,这些文件将被记录到migration数据表中。

  • php artisan migrate:refresh

    对于这个命令,将会清除数据表migration数据,回滚所有迁移并重新运行所有迁移。 所谓回滚,就是先执行回滚动作(down()函数定义), 再执行迁移动作(up()函数定义)。

  • php artisan migrate:rollback

    回滚最后一次迁移

  • php artisan migrate:reset

    回滚所有迁移

  • php artisan migrate:refresh --seed

    回滚所有迁移并重新运行迁移,迁移后,执行database/seeds/DatabaSeeder进行数据表的数据填充


3.db:seed

依照database/seeds/目录下文件内容对数据库执行填充。 参考链接: 数据填充

数据填充Seeder,是使用 seed 类来给数据库填充测试数据。 一般在laravel中,填充测试数据有以下几种方式

注意 在Database/seeds/目录下创建一个数据填充文件后,需要通过以下命令注册到Laravel中,否则这个文件类不会被识别 : composer dump-autoload

** 数据生成的命令 ** 运行database/seeds/DatabaseSeeder.php执行数据填充 php artisan db:seed
指定database/seeds/目录下的某个类进行填充 php artisan db:seed --clas=SomeSeederClass

  • 可以使用数据工厂来生成数据,数据工厂在database/factories目录内定义。

    $factory->define(App\Models\AppGroup::class,function($faker){
       $appId = str_replace('-','',$faker->uuid);
       return [
          'group_name'=>$faker->company,
          'app_secret'=>substr($appId,1,12),
          'crm_url'=>$faker->url,
          'group_logo'=>$faker->imageUrl,
          'group_areaid'=>$faker->numerify("###"),
          'group_area_info'=>$faker->state.' '.$faker->city.' '.$faker->country,
          'create_time'=>$faker->unixTime(),
          'create_person'=>$faker->name,
           'created_at'=>\Carbon\Carbon::now(),
           'updated_at'=>\Carbon\Carbon::now()
       ];
    });
    // 在Seeder文件中,使用factory()函数调用工厂类创建数据
    $brands = factory(App\Models\AppGroup::class,12)->make();
    
  • 可以直接在seed文件内SQL生成数据

    //直接在seeder中创建数据
    DB::table('product_class')->truncate();
    DB::statement('INSERT INTO ev_product_class(gc_id,app_id,gc_name,type_id,gc_parent_id,gc_sort,gc_title,
          gc_keywords,gc_description,gc_image,level_num,create_time,create_person,created_at,updated_at)
                SELECT ecc.gc_id,:app_id,ecc.gc_name,type_id,gc_parent_id,gc_sort,:gc_title,
          gc_keywords,:gc_description,gc_image,level_num,:create_time,create_person,:created_at,:updated_at FROM ev_common_class ecc
          where ecc.industry_id=1',
        [
            'app_id'=>$this->app_id_str,
            'gc_title'=>$this->faker->word,
            'gc_description'=>$this->faker->sentences(3,10),
            'create_time'=>Carbon::now()->timestamp,
            'created_at'=>Carbon::now(),
            'updated_at'=>Carbon::now()
        ]
    );
    
  • 使用Eloquent模型创建数据

    $OrderCommon = [
                    'order_id' => $orderModel->order_id,
                    'app_id' => $orderModel->app_id,
                    'order_sn' => $orderModel->order_sn,
                    'shipping_time' => $this->faker->unixTime,
                    'shipping_express_id' => 1,               //物流公司id
                    'shipping_code' => '',
                    'evaluation_time' => '',
                    'order_message' => $this->faker->word,
                    'order_pointscount' => 0,
                    'deliver_explain' => '',
                    'seller_daddress_id' => '',
                    'reciver_name' => $buyserAddress->buyer_name,
                    'reciver_info' => $buyserAddress->address,
                    'reciver_province_id' => $buyserAddress->province_id,
                    'reciver_daddress_id' => $buyserAddress->buyer_address_id,
                    'invoice_info' => '',
                    'create_time' => $this->faker->unixTime('now'),
                    'create_person' => $this->faker->name
                ];
    App\Models\ShopOrderCommon::create($OrderCommon);
    

4.tinker

是 laravel提供的命令行工具,可以和项目进行交互。 对于Lumen框架来说,默认是不带tinker命令的,需要安装以下库才允许使用: composer require vluzrmos/tinker

php artisan tinker

以下是在tinker中的交互输入

    Psy Shell v0.4.1 (PHP 5.4.16 — cli) by Justin Hileman
    >>> $name = 'zhang jinglin';
    => "zhang jinglin"

    >>> $name
    => "zhang jinglin"

    >>> $article = new App\Article;
    => <App\Article #000000005c4b7ee400000000ab91a676> {}

    >>> $article->title = 'My First Article';
    => "My First Article"

    >>> $article->published_at = Carbon\Carbon::now();
    => <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
           date: "2015-03-28 06:37:22",
           timezone_type: 3,
           timezone: "UTC"
       }

    >>> $article;
    => <App\Article #000000005c4b7ee400000000ab91a676> {
           title: "My First Article",
           body: "Some content...",
           published_at: <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
               date: "2015-03-28 06:37:22",
               timezone_type: 3,
               timezone: "UTC"
           }
       }

    >>> $article->toArray();
    => [
           "title"        => "My First Article",
           "body"         => "Some content...",
           "published_at" => <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
               date: "2015-03-28 06:37:22",
               timezone_type: 3,
               timezone: "UTC"
           }
       ]

    >>> $article->save();
    => true

    >>> App\Article::all()->toArray();
    => [
           [
               "id"           => "1",
               "title"        => "My First Article",
               "body"         => "Some content...",
               "published_at" => "2015-03-28 06:37:22",
               "created_at"   => "2015-03-28 06:38:53",
               "updated_at"   => "2015-03-28 06:38:53"
           ]
       ]

    >>> $article = App\Article::find(1);
    => <App\Article #000000005c4b7e1600000000ab91a676> {
           id: "1",
           title: "My First Update Title",
           body: "Some content...",
           published_at: "2015-03-28 06:37:22",
           created_at: "2015-03-28 06:38:53",
           updated_at: "2015-03-28 06:42:03"
       }

    >>> $article = App\Article::where('body', 'Some content...')->get();
    ...

    >>> $article = App\Article::where('body', 'Some content...')->first();
    ...

    >>> $article = App\Article::create(['title' => 'New Article', 'body' => 'New body', 'published_at' => Carbon\Carbon::now()]);

    >>> $article->update(['body' => 'New Updaet Body']);
    => true

=>以下命令可能就是laravel所独有的

5.make controller

通过命令创建Controller类

  • 默认方式,类中会有一系列方法,包括index,create,store,show...: php artisan make:controller TestController
  • 创建没有任何预定义方法的控制器类 php artisan make:controller TestContoller --plain

6. make其它功能

包括:
- make:event
- make:middleware
- make:model
- make:provider
- make:request

7. 查看路由

针对当前的路由配置,可以通过以下命令查看: php artisan route:list