本系列文的環境狀態,可點擊此連結後花園環境參考
這回的 One To Many 就是個博愛的關係,1 個可以跟很多個有染有關係。
例: A 資料表中有一個 甲 可同時跟 B 資料表內的 甲、乙、丙 ,都發生關係締結關聯
在 Terminal 輸入指令
$ php artisan make:model Nutrient -m
路徑:app/Flower.php
放入程式碼
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flower extends Model
{
public function Nutrient()
{
// 每種 flowers 有數種 nutrients
// 締結 單一 Flower 對 多 Nutrient 的關係(正向)
return $this->hasMany('App\Nutrient');
}
}
路徑:app/Nutrient.php
放入程式碼
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Nutrient extends Model
{
protected $fillable = ['kind','flower_id'];
public function flower()
{
// 不同的 nutrients 屬於同一種 flowers
return $this->belongsTo('App\Flower');
}
}
路徑:database/migrations/{日期}_create_nutrients_table.php
新增程式碼
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateNutrientsTable extends Migration
{`
public function up()
{
Schema::create('nutrients', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
$table->string('kind');
$table->unsignedBigInteger('flower_id');
});
}
public function down()
{
Schema::dropIfExists('nutrients');
}
}
在 Terminal 輸入指令,建立 nutrients 表單到資料庫
$ php artisan migrate
在 Terminal 輸入指令,建立新的種子
$ php artisan make:seeder NutrientsTableSeeder
路徑:database/seeds/NutrientsTableSeeder.php
寫入程式碼及要填充的資料,之後要做爲查詢參照用
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
class NutrientsTableSeeder extends Seeder
{
public function run()
{
DB::table('nutrients')->insert([
[
'created_at' => Carbon::now(), // 對應 timestamps 的 created_at 列位
'updated_at' => Carbon::now(), // 對應 timestamps 的 updated_at 列位
'kind' => 'sun',
'flower_id' => '17',
],
[
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'kind' => 'air',
'flower_id' => '3',
],
[
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'kind' => 'water',
'flower_id' => '3',
],
[
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'kind' => 'soil',
'flower_id' => '18',
],
[
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'kind' => 'blood',
'flower_id' => '17',
],
[
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'kind' => 'salt',
'flower_id' => '10',
],
[
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'kind' => 'poison',
'flower_id' => '17',
],
[
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'kind' => 'water',
'flower_id' => '8',
],
]);
}
}
確認無誤後
在 Terminal 輸入指令,讓 seeder 運行,將資料填充到資料庫的 table 中
$ php artisan db:seed --class=NutrientsTableSeeder
接著可以到資料庫確認 nutrientstables 是否已有要填充進去的資料了。
這次就先到這邊了
下一回,將測試如何確定 flower 可具有跟數種 nutrients 的關聯。
參考連結:
❁ Laravel 官方 - Eloquent: Relationships
❁ Charllen 大 - Laravel新手基礎訓-Eloquent: Relationships-One to Many