laravel5Eloquent模型與數據表的創建
下面是有關管理員模型與表的創建
- 生成模型時同時生成數據庫遷移文件
- 在生成的遷移文件中添加字段
- 運行命令行生成數據表
- 命令進行混合運用
- 生成工廠文件,數據填充文件
- 工廠模型代碼
- 數據填充文件代碼
- 數據填充執行文件代碼
- 執行命令行生成數據文件
Eloquent模型與生成數據庫遷移文件
方法一:
php artisan make:model AdminModel/Admin //生成模型
php artisan make:migration creat_procedures_table //創建數據遷移文件
方法二:可以生成模型時生成數據庫遷移,使用 –migration 或 -m 選項
php artisan make:model AdminModel/Admin -m
注意:
方法一與方法二生成的數據遷移文件多少有些不同,測試的時候注意下。這裡不過多贅述,推薦第二種,簡單方便
我這裡在測試的時候使用的是 第二種 方法,生成文件
app\AdminModel\Admin.php
database\migrations\2020_09_03_012211_create_admins_table.php
然後在生成的遷移文件中添加字段,我這裡為了測試添加的多為比較常用的字段,如下所示:
public function up() { Schema::create('admins', function (Blueprint $table) { $table->engine='InnoDB'; $table->increments('id');//自增主鍵 $table->string('username',50)->unique()->comment('用戶名');//唯一值 $table->string('password')->comment('密碼');// $table->enum('status',[0,1])->default(1)->comment('狀態'); $table->decimal('money',10,2); $table->ipAddress('ip')->default(''); $table->rememberToken()->default(''); //remember_token $table->timestamps(); //created_at updated_at //bigIncrements char string text mediumText longText integer tinyInteger smallInteger mediumInteger bigInteger unsignedInteger unsignedTinyInteger unsignedSmallInteger unsignedMediumInteger unsignedBigInteger float double decimal unsignedDecimal boolean enum json jsonb date dateTime dateTimeTz time timeTz timestamp timestampTz timestamps nullableTimestamps timestampsTz ipAddress rememberToken // char string text integer tinyInteger decimal enum }); }
這裡需要注意如果使用 sting 或者 char 的時候注意限制字段值長度,不然可能會報錯。
php artisan migrate
CREATE TABLE `admins` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用戶名', `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密碼', `status` enum('0','1') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '1' COMMENT '狀態', `money` decimal(10,2) NOT NULL, `ip` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `admins_username_unique` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
注意:
1 運行前請先確定是否配置好數據庫鏈接,如果沒有請前往根目錄下,查找文件 .env 進行設置,有一定基礎的直接根據字段名修改,無基礎的找基礎知識吧,這裡不過多贅述。
2 不需要指定具有遷移文件,我們這裡需要清楚laravel創建數據表的模式(具體看圖片)
遍歷 database\migrations\ 下的所有遷移文件,對比數據表中的 migrations 表(如果首次運行 migrate 會自動創建),找出沒有進行遷移的文件進行遷移
為了更方便的了解,比如我們先刪除 admins表 然後對應的也要刪除 migrations 中對應的記錄喔。 繼續執行 php artisan migrate 或發現又重新新建了數據表 ,migrations 表中也新生成了一條記錄
有人會發現 有存在 procedures 的記錄,但是沒有生成數據表。
這裡就可以很直觀的解釋 php artisan make:migration creat_procedures_table
單獨創建數據遷移文件,只生成文件與對應的方法,但是方法中沒有設置對應的數據表名,也沒有添加自增字段id.
php artisan migrate
php artisan migrate:rollback
php artisan migrate:rollback –step=5
php artisan migrate:reset
接下來對數據表進行數據填充,具體可參考//xueyuanjun.com/post/9694
這裡主要對工廠模型填充數據進行測試
生成工廠模型文件
php artisan make:factory AdminFactory
生成填充文件
php artisan make:seeder AdminsTableSeeder
生成文件所在路徑
database\factories\AdminFactory.php
database\seeds\AdminsTableSeeder.php
$factory->define(App\AdminModel\Admin::class, function (Faker $faker) { return [ 'username' => $faker->name, 'password' => bcrypt('123456'), // secret 'ip'=>$faker->ipv4, 'status'=>1, 'money'=>0, 'remember_token' => str_random(10), ]; });
關於Faker 可參看 vendor\fzaninotto\faker\src\Faker\Generator.php
數據填充文件代碼:AdminsTableSeeder.php
use Illuminate\Database\Seeder; class AdminsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(\App\AdminModel\Admin::class, 5)->create(); } }
數據填充執行文件代碼:database\seeds\DatabaseSeeder.php
use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call(AdminsTableSeeder::class); } }
注意:
工廠模型與數據填充文件中 對應的是admins的模型文件,而執行文件中執行的是填充文件的名稱
- php artisan db:seed
- php artisan db:seed –class=UsersTableSeeder
我這裡使用的是 第一種
第一種 多個填充器類,一次性運行
第二種 通過指定填充器類的方式將這條記錄插入到數據庫