iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 5
0
Modern Web

Laravel 與 Redis教程系列 第 2

Laravel 教程 DAY 5 - 實作入門 - 1

  • 分享至 

  • xImage
  •  

本篇介紹

本篇將開始透過實作blog來熟悉Laravel開發模式,以建立基本開發能力。本次實作將使用Laravel 5.5,請先確認PHP版本 >=7.0.8,且Apache與MySQL服務皆已開啟,再進行以下操作

展開Laravel的旅程吧!

編輯器建議:VS Code、Sublime、Atom

今天要帶各位實作部落格的文章CRUD (Create、Read、Update、Delete),即新增、查詢、修改、刪除。而在第一篇有提到Laravel使用的是MVC架構,並使用framework提供的套件,因此程式碼的寫法與開發模式,會與撰寫傳統PHP有很大的不同。

首先,我們需建立資料庫來儲存blog的資料,那我們打開瀏覽器,在URL輸入http://localhost:8000/adminer,帳號root,密碼預設為空

  • UwAmp使用者可能會遇到登入後出現亂碼的問題,這時請下載WampServer即可解決。登入後,先建立新的資料庫,並命名為「blog」

此時修改專案中的「.env」,將DB相關參數修改為

DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=

而一篇文章至少需記錄「發文者」、「標題」與「發文內容」,所以我們需要一張文章的資料表,但以前都得使用資料庫管理工具,逐一設定欄位的名稱與其他屬性,或者利用SQL語句的「CREATE TABLE ...」建立資料表,相當麻煩,因此Laravel使用「migration」(資料遷移檔) 進行資料表的建構。這時利用Command輸入:

php artisan make:model Post -m
  • 這項指令會為我們建立名為「Post」的model,而「-m」表示建立model的同時,也產生該資料表的migration,因為原則上,一張表對應一個model。

此時我們會看到app資料夾與database\migrations底下,分別多了「Post.php」與migration (檔名開頭為今天日期),這時打開migration定義文章資料表的結構

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('title');
        $table->string('content');
        $table->timestamps();
    });
}

我們將這三個欄位定義為string型態 (對應資料表的VARCHAR),當然你也能為欄位修飾其屬性,如「允許空白」、「唯一」、「索引」或「預設值」

  • 預設主鍵為id,它是每筆資料的流水號,新增資料時由資料表自動產生
  • timestamps為時間戳記,預設自動產生資料的建立時間(created_at)與更新時間(updated_at)
$table->string('XXX_1')->nullable();
$table->string('XXX_2')->unique();
$table->string('XXX_3')->index();
$table->integer('XXX_4')->default(1);

但不知道各位有沒有發現到一件事,我們的model為「Post」,為何資料表是「posts」呢?原因是:

  • model本身是個類別,所以採「大駝峰」命名,且名稱最後不加s
  • 資料表命名規則為:table名稱小寫,且補上s
  • 上述名稱,Artisan指令會自動幫我們轉換

migration定義完成後,在command輸入以下指令,即可自動幫我們在資料庫建構資料表

php artisan migrate

然而Laravel 5.4以後,執行migrate可能會遇到如:max key legnth...的問題,只要在app\Providers\AppServiceProvider.php中boot方法加入下列程式碼即可

public function boot()
{
    \Schema::defaultStringLength(191);
}

再執行以下指令

php artisan migrate:fresh

回到資料庫就能看到資料表已經建立好了!是不是方便多了呢?

  • 執行migrate時,會依據資料庫中的migrations資料表,與專案的database\migrations進行比對,檢查有無新的migration
  • 若更動migration內資料表的定義,則執行php artisan migrate:fresh,即能夠以遷移的方式更新資料表

(未完待續)


上一篇
Laravel 教程 DAY 1 - 開發環境設定
下一篇
Laravel 教程 DAY 6 - 實作入門 - 2
系列文
Laravel 與 Redis教程4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言