1). 當前使用的 Laravel 版本?
Laravel8
今天看到模型$date屬性,搜尋了一下,網上說他的作用是:裡面所包含的欄位,就是當使用這個屬性的時候,可以直接後面跟著carbon類時間操作的任何方法。
然後我自己試著驗證一下,我有個模型如下:
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserTrip extends Model
{
protected $table = 'user_trip';
protected $dates = [
'created_at',
'updated_at'
];
}
然後我在控制器查詢列印:
$trip = UserTrip::where(['id' => 2])
->select(["*"])
->first();
var_dump($trip->created_at);
echo $trip->created_at->getTimestamp();
列印結果:
object(Illuminate\Support\Carbon)#310 (19) {
["endOfTime":protected]=>
bool(false)
["startOfTime":protected]=>
bool(false)
["constructedObjectId":protected]=>
string(32) "000000000a76bc7c0000000031c40a50"
["localMonthsOverflow":protected]=>
NULL
["localYearsOverflow":protected]=>
NULL
["localStrictModeEnabled":protected]=>
NULL
["localHumanDiffOptions":protected]=>
NULL
["localToStringFormat":protected]=>
NULL
["localSerializer":protected]=>
NULL
["localMacros":protected]=>
NULL
["localGenericMacros":protected]=>
NULL
["localFormatFunction":protected]=>
NULL
["localTranslator":protected]=>
NULL
["dumpProperties":protected]=>
array(3) {
[0]=>
string(4) "date"
[1]=>
string(13) "timezone_type"
[2]=>
string(8) "timezone"
}
["dumpLocale":protected]=>
NULL
["dumpDateProperties":protected]=>
NULL
["date"]=>
string(26) "2022-04-27 11:17:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Asia/Shanghai"
}
1651029430
說明確實是一個Carbon物件,然後我把模型的$date陣列裡的updated_at去掉,再次執行控制器程式碼
發現結果一樣,還是Carbon物件:
object(Illuminate\Support\Carbon)#310 (19) {
["endOfTime":protected]=>
bool(false)
["startOfTime":protected]=>
bool(false)
["constructedObjectId":protected]=>
string(32) "00000000236533c0000000006c7d0566"
["localMonthsOverflow":protected]=>
NULL
["localYearsOverflow":protected]=>
NULL
["localStrictModeEnabled":protected]=>
NULL
["localHumanDiffOptions":protected]=>
NULL
["localToStringFormat":protected]=>
NULL
["localSerializer":protected]=>
NULL
["localMacros":protected]=>
NULL
["localGenericMacros":protected]=>
NULL
["localFormatFunction":protected]=>
NULL
["localTranslator":protected]=>
NULL
["dumpProperties":protected]=>
array(3) {
[0]=>
string(4) "date"
[1]=>
string(13) "timezone_type"
[2]=>
string(8) "timezone"
}
["dumpLocale":protected]=>
NULL
["dumpDateProperties":protected]=>
NULL
["date"]=>
string(26) "2022-04-27 11:17:10.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Asia/Shanghai"
}
1651029430
所以我搞不明白這個屬性是幹嘛的了?
好像發現問題了,這2個欄位在MySQL裡面是datetime型別的,改為其他比如timestamp,去掉updated_at之後就報錯了,因為他不是carbon物件。
剛剛又驗證了下,如果我新增一個欄位test_time,不管他是datetime型別還是timestamp型別,在$dates陣列配就是carbon物件,不在就不是。所以個人認為是框架預設對created_at,updated_at轉為carbon物件,其他欄位要自定義【比如上面的test_time,要想讓他是carbon物件,就要放到$dates陣列】
本作品採用《CC 協議》,轉載必須註明作者和本文連結