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
tinker命令的使用 参考: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