iT邦幫忙

第 11 屆 iThome 鐵人賽

1

本系列文的環境狀態,可點擊此連結後花園環境參考

這回的 One To Many 就是個博愛的關係,1 個可以跟很多個有染有關係。
例: A 資料表中有一個 甲 可同時跟 B 資料表內的 甲、乙、丙 ,都發生關係締結關聯

建立 model 及 migrate

在 Terminal 輸入指令

$ php artisan make:model Nutrient -m

締結 1 對 多 關係的 Model

  • hasMany:每種 flowers 可能需要多種 Nutrients
  • belongsTo:不同的 Nutrients 屬於同一種 flowers

路徑: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');
    }
}

建立資料庫 table

路徑: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

建個 Nutrients 種子,填充資料

在 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


上一篇
✾後花園D38✾-也許忠貞的 1 對 1 關係? Part 2( 測試 One To One Relationships )
下一篇
✾後花園D40✾-博愛的 1 對 多 關係? Part 2( 測試 One To Many Relationships )
系列文
在後花園遇見LP,Laravel及PHP的甜蜜糾纏,火熱上映49
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
阿展展展
iT邦好手 1 級 ‧ 2019-11-10 02:51:46

https://ithelp.ithome.com.tw/upload/images/20191110/20119546SFc0GcKRmR.jpg

/images/emoticon/emoticon16.gif

梗圖真得很多耶

估狗是好狗!/images/emoticon/emoticon07.gif

我要留言

立即登入留言