Blog Details

Welcome to our blog.

$guarded 和 $casts的用途和功能

2024-08-18

23

$guarded 和 $casts的用途和功能

在 Laravel 中,$guarded$casts 是模型中的兩個不同屬性,它們各自有不同的用途和功能。以下是對這兩個屬性的詳細解釋及其區別:

$guarded

作用

  • $guarded 是一個數組,用於指定哪些屬性在批量賦值時應該被保護(即不能被賦值)。

  • 當你使用 create()update() 方法進行批量賦值時,Laravel 會檢查這個數組中列出的屬性,並防止它們被賦值。

用法

protected $guarded = ['id', 'created_at', 'updated_at'];

在這個例子中,idcreated_atupdated_at 這三個屬性在進行批量賦值時將不會被賦值。這通常是為了防止用戶在創建或更新模型時意外修改這些重要的系統字段。

$casts

作用

  • $casts 是一個數組,用於指定模型屬性的數據類型轉換。

  • 當你訪問這些屬性時,Laravel 會自動將其轉換為指定的類型。例如,將日期字符串轉換為 Carbon 實例,或將 JSON 字符串轉換為數組。

用法

protected $casts = [
    'created_at' => 'datetime:Y-m-d',
];

在這個例子中,created_at 屬性將被轉換為 Carbon 實例,並格式化為 Y-m-d 格式。這意味著當你訪問 $post->created_at 時,它將返回一個格式化的日期字符串,而不是原始的日期時間字符串。

主要區別

屬性作用用法示例
$guarded指定哪些屬性在批量賦值時不應該被賦值。protected $guarded = ['id'];
$casts指定屬性的數據類型轉換,方便在訪問時自動轉換為所需類型。protected $casts = ['created_at' => 'datetime:Y-m-d'];

總結

  • 使用 $guarded 來保護模型的特定屬性不被批量賦值。

  • 使用 $casts 來定義模型屬性的數據類型轉換,讓訪問這些屬性時更方便。

這兩者可以一起使用,以確保模型的安全性和數據的正確性。

Share This Post