PHP Laravel Model

編輯 : Frank
日期 : 2020/04/08


資料表建置

建置 model 和 migrate

1
2
3
4
5
6
php artisan make:model [Model Name] -m
php artisan make:model People -m

上述指令等同於下面兩句指令的簡化
php artisan make:model People
php artisan make:migration createPeopleTable

建置資料表的屬性

  1. 調整migrate

更改 function up 內容,使其在 migrate 時,可以建置相對應的屬性。

1
2
3
4
5
6
7
8
9
10
11
12
13
cd database/migrations
vim 2020_04_06_031647_create_people_table.php

public function up()
{
Schema::create('people', function (Blueprint $table) {
$table->increments('id');
$table->string('name',50);
$table->integer('age');
$table->string('born',20);
$table->timestamps();
});
}
  1. 執行 migrate

執行所有未完成的migrations

更多指令請參考連結

1
php artisan migrate

資料填充

  1. 調整 model

宣告屬性與資料表名稱

1
2
3
4
5
6
7
8
9
10
11
12
13
cd app
vim People.php

class People extends Model
{
protected $table = 'people';

protected $fillable = [
'name',
'age',
'born'
];
}
  1. 建置調整執行 Seeder

建置 Seeder

1
php artisan make:seeder PeopleSeeder

透過 Seeder來進行資料填充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd database/seeds
vim PeopleSeeder

use App\People;
class PeopleSeeder extends Seeder
{
public function run()
{
$newPeople = new People();
$newPeople->name = 'frank';
$newPeople->age='25';
$newPeople->born='1995/04/29';
$newPeople->save();
}
}

將 Seeder 放入 DatabaseSeeder 來宣告執行

1
2
3
vim DatabaseSeeder.php

$this->call(PeopleSeeder::class);

執行 Seeder 來給予資料庫資料

1
php artisan db:seed

Factory

除了手動給予數值外,可以透過factory來協助建置多比假資料。

  1. 建置factory

    1
    php artisan make:factory PeopleFactory --model=People
  2. 定義填充物

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    use App\People;
    use Faker\Generator as Faker;

    $factory->define(People::class, function (Faker $faker) {

    $born = $faker->dateTimeBetween('1990-01-01', '2012-12-31')
    ->format('Y/m/d');
    $age = call_user_func(function() use( $born){
    return (date('Y') - date('Y', strtotime($born)));
    });

    return [
    'name' => $faker->name,
    'age' => $age,
    'born' => $born
    ];
    });
  3. 放置 Seeder內執行

    1
    2
    3
    4
    5
    6
    public function run(){
    # 建一筆
    factory(App/People::class)->create();
    # 直接建三筆
    factory(App/People::class,3)->create();
    }

總結

本篇講述透過 migrate 建置資料表屬性,並透過 seeder 來進行資料填充,並且規劃好 model 以便在 curd 時,可以找到相對應的欄位資料。

下一步將需了解 Laravel Eloquent ORM,透過此方法可以對於資料表欄位進行 curd 的動作,並且建置資料表之間的關聯。

可以透過 Laravel RESTful 資源控制器,來學習 ORM 對於資料庫的 curd 操作,可參考此 GitHub