在使用 Laravel 的過程中,常常會遇到需要轉換欄位的情況。在這篇文章中,我們將深入了解 Laravel 中欄位轉換的基本知識,包括如何自訂欄位轉換類型。
Laravel 中的欄位轉換用於將模型屬性從一種格式轉換為另一種格式,以滿足不同業務需求,例如將資料庫中保存的時間戳格式轉換為人類可讀的時間格式。
Laravel 提供了豐富的欄位轉換類型,包括日期、時間、JSON、陣列等類型,透過在模型中定義它們,我們可以輕鬆地對模型屬性進行轉換。下面讓我們看看Laravel 中如何定義欄位轉換類型:
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $casts = [ 'published_at' => 'datetime', 'meta' => 'array', ]; }
在上面的範例中,我們將published_at
轉換為datetime
類型,將 meta
轉換為array
類型。這樣,當我們從資料庫中取得Post
模型時,published_at
將會自動轉換為Carbon
實例,meta
將會自動轉換為PHP 數組。
除了 Laravel 內建的欄位轉換類型,我們也可以自訂欄位轉換類型,以滿足特定的業務需求。下面讓我們來看看自訂欄位轉換類型的範例:
namespace App\Models; use Carbon\Carbon; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; class Price implements CastsAttributes { public function get($model, $key, $value, $attributes) { return $value / 100; } public function set($model, $key, $value, $attributes) { return $value * 100; } }
在上面的範例中,我們定義了一個名為Price
的自訂欄位轉換類型,用於將模型屬性從以分為單位的整數格式轉換為以元為單位的浮點數格式。其中,get
方法用於將屬性從資料庫讀取時進行轉換,set
方法用於將屬性寫入資料庫時進行轉換。
要在模型中使用自訂欄位轉換類型,我們只需在$casts
屬性中指定類型即可:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Product extends Model { protected $casts = [ 'price' => Price::class, ]; }
在上面的範例中,我們將price
屬性轉換為Price
類型,這樣當我們取得Product
模型時,price
將會自動從資料庫中讀取以分為單位的整數格式,並轉換為以元為單位的浮點數格式。
除了在模型中使用自訂欄位轉換類型外,我們還可以在查詢建構器中使用欄位轉換類型,以滿足特定的查詢需求。下面讓我們看看如何使用欄位轉換類型來進行查詢:
$posts = Post::where('published_at', '>', now()->subDays(7))->get();
在上面的範例中,我們查詢了最近 7 天內發布的文章。 Laravel 會自動將 published_at
欄位的值轉換為 Carbon
實例,並與目前時間進行比較。
總之,欄位轉換是 Laravel 中非常重要的特性,它可以幫助我們輕鬆地對模型屬性進行轉換,以滿足不同業務需求。透過本文的介紹,相信讀者已經了解了 Laravel 中字段轉換的基本知識,希望可以為讀者在實際專案中使用 Laravel 帶來幫助。
以上是聊聊Laravel中字段轉換的基本知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!