繼上篇使用 Model 存取資料庫,再來講一些 Model 的用法。
原本建立一個 Model 的時候,預設會抓同名的資料表,比如我們建立 Flight 的 model,這個 model 預設會去操作 flight 的資料表,我們可以用下面的方法修改設定要操作的 model。
namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { protected $table = 'my_flights'; }
Eloquent 也會假設每個資料表有一個主鍵欄位叫做 id
。你可以定義一個 $primaryKey
屬性來覆寫這個主鍵。
amespace App\Models; use Illuminate\Database\Eloquent\Model; class Flight extends Model { protected $primaryKey = 'flight_id'; }
預設 Model 的 id 欄位就會 auto increment,如果不希望自動增加的話,可以修改設定如下:
class Flight extends Model { public $incrementing = false; }
如果不希望主鍵的 type 是 int 的話,可以修改設定如下:
class Flight extends Model { /** * The data type of the auto-incrementing ID. * * @var string */ protected $keyType = 'string'; }
預設情況下,Eloquent 預期你的資料表會有 created_at
和 updated_at
欄位。如果你不希望讓 Eloquent 來自動維護這兩個欄位,在你的模型內將 $timestamps
屬性設定為 false
:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false; }
如果你需要客製化你的時間戳記格式,在你的模型內設定 $dateFormat
屬性。這個屬性決定日期如何在資料庫中儲存,以及當模型被序列化成陣列或是 JSON 時的格式:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The storage format of the model's date columns. * * @var string */ protected $dateFormat = 'U'; }
如果要修改 create 跟 update 的欄位名稱,可以依照以下設定:
class Flight extends Model { const CREATED_AT = 'creation_date'; const UPDATED_AT = 'updated_date'; }
預設情況下,所有的 Eloquent 模型會使用你應用程式中預設的資料庫連接設定。如果你想為模型指定不同的連接,可以使用 $connection
屬性:
namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { protected $connection = 'connection-name'; }
如果你需要處理上千筆 Eloquent 查詢結果,可以使用 chunk
命令。chunk
方法將會取得一個 Eloquent 模型的「分塊」,將它們送到給定的 閉包 (Closure)
進行處理。當你在處理大量的結果時,使用 chunk
方法可以節省記憶體:
use App\Models\Flight; Flight::chunk(200, function ($flights) { foreach ($flights as $flight) { // } });