iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
1
Modern Web

讓PHP再次偉大,使用Laravel系列 第 20

Laravel Eloquent ORM-(下)

  • 分享至 

  • xImage
  •  

終於來到這個第 20 天了,今天我們繼續談談 Eloquent ORM 的部分,Laravel 為 Eloquent 提供一個很棒的東西,那就是relationship,有點像是我們資料庫裡面的「外來鍵」,透過使用relationship,我們可以更加輕巧的使用 ORM 呢!

Laravel 寫了一個很詳盡的文件:https://laravel.com/docs/6.x/eloquent-relationships

提供我們以下這些類型的「relationship」

  • 一對一
  • 一對多
  • 多對多
  • 多對一
  • has-one-through
  • Has Many Through

這裡我以一對多的關係作為情境的例子。沿著之前的簡單部落格專案的例子,「一篇文章可以有很多標籤」吧。

首先,我們必須先做一個很多「標籤」的資料 Model,首先做 Migration 開始。

$ php artisan make:migration tags --create=tags

在新的{timestamp}_create_tags_table.php調整一下資料表結構

    public function up()
    {
        Schema::create('tags', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('article_id')->references('id')->on('articles');
            $table->string('name');
            $table->timestamps();
        });
    }

之後建立 Model

php artisan make:model Tag

之後我們就開始建立文章對標籤的一對多關係了,讓我們來到app\Article.php這裏。加入一段

    public function tags()
    {
        return $this->hasMany('App\Tag');
    }

接下來我們來測試一下,打開php artisan tinker

>>> use App\Article;
>>> $article = Article::first();
=> App\Article {#3053
     id: 11,
     title: "123",
     content: "123",
     created_at: "2019-09-29 08:10:02",
     updated_at: "2019-09-29 08:10:02",
   }
>>> $article->tags
=> Illuminate\Database\Eloquent\Collection {#3047
     all: [],
   }

這樣就表示我們有成功了喔!

要看完整程式碼的可以參考這裡:https://github.com/r567tw/Make-PHP-Great-Again/commit/2851d8e553e2eb556026095cf110fca9d7d71972


上一篇
Laravel Eloquent ORM-(上)
下一篇
Laravel Testing
系列文
讓PHP再次偉大,使用Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言