我正在嘗試使用工廠播種一些資料。我嘗試播種的欄位之一是日期欄位——我在我的工廠中使用以下代碼執行此操作:
return [
...
'date' => Carbon::now()->subDays(rand(1, 365))->startOfDay()
];
問題是,這是作為字串保存在資料庫中的——這意味著我不能在刀片模板中執行以下操作 {{ $transaction->date->format('M, d Y') }}:
當我嘗試這樣做時,我收到以下錯誤訊息 Call to a member function format() on string:
作為一個測驗,我在我的刀片模板中嘗試了相同的確切代碼,只是切換到created_at-date它可以按我的意愿作業。即,這有效: {{ $transaction->created_at->format('M, d Y') }}.
萬一這很重要,該created_at欄位是$table->timestamps()在我的遷移檔案中創建的,而該date欄位的創建如下 $table->date('date');:
知道我需要做什么才能使其正常作業嗎?
謝謝。
uj5u.com熱心網友回復:
Laravel 提供了一種將某些 Model 屬性“轉換”為特定資料型別的方法,包括字串、整數、日期等。由于 Carbon 內置在 Laravel 中,指定date型別會自動將 Model 屬性轉換為 Carbon 實體。您需要做的就是為您的模型提供該邏輯:
class Transaction extends Model {
protected $casts = [
'date' => 'date'
];
...
}
現在,當您檢索Transaction模型記錄時,該date屬性將自動成為一個Carbon實體:
$transaction = Transaction::first();
dd($transaction->date, get_class($transaction->date));
// ^ Carbon\Carbon @1646769789^ {#4514 ... }, `Carbon\Carbon`
現在,您可以執行 Carbon 邏輯,只需鏈接:
{{ $transaction->date->format('Y-m-d') }}
// `2022-03-08`
有更多的轉換型別可用,您可以通過簡單地將它們作為鍵/值對添加到$casts陣列中來指定多個屬性轉換。完整的檔案在這里:
https://laravel.com/docs/9.x/eloquent-mutators#attribute-casting
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/440223.html
上一篇:留在登錄laravel9
