繼上篇使用 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) {
//
}
});