Elegant Eloquent

首先是資料表設計

實務上來說

至少要做到1NF

舉個例子來說

今天班上有三個同學

三個同學都考了三個科目

80 90 60
70 60 90
90 30 60

看起來或許很簡單

Title Text

在Laravel裡面

主要有兩種model

DB 或 Model(Eloquent)

class DB

  • 輕量化的class
  • 同時支援raw sql以及eloquent style
  • 沒有model event
<?php

// eloquent mode
DB::table('users')->where('id', 1)->update('name', 'foo');

// sql mode
DB::update("UPDATE users SET name='foo' WHERE id=1");

適合更多的彈性

但是很難維護

class Model

  • ActiveRecord style (from Ruby On Rails)
  • 語意比較明確
  • Virtual Attribute... and so on
<?php

// 取得ID為1的第一筆資料
App\User::where('id', 1)->first();


// 取得ID為1的第一筆資料,不存在的話為fail
App\User::where('id', 1)->firstOrFail();

新增刪除也是

<?php

// 新增user,名字為foo
App\User::create(['name' => 'foo']);

// 刪除ID為1的user
App\User::where('id', 1)->delete();

Laravel Eloquent

提供了方便的語法

<?php

...
...

public function store()
{
    $json = request()->json();

    App\User::create($json);

    return response(204);
} 

What's wrong?

所有json的資料都會被儲存

<?php

class User extends Model
{

    protected $fillable = ['name'];
}

$fillable 提供直接賦值的filter

當然,eloquent支援不止是這樣

支援很多特殊的attribute

  • primaryKey
  • incrementing
  • timestamps
  • casts
  • dates
  • ...

或者你也可以到這裡看

來一個比較特別的

Virtual Attribute

Made with Slides.com