firstOrCreate()
方法接受一組屬性,並且它基於來自那些返回或創建記錄的屬性的記錄的存在。
例如:
| id | name | created_at |
| 1 | Joe | 2015-10-01 01:00:00 |
| 2 | Sam | 2015-10-01 01:00:00 |
| 3 | Ali | 2015-10-01 01:00:00 |
| 4 | Tom | 2015-10-01 01:00:00 |
$user = User::firstOrCreate(['name' => 'Joe']);
// $user = record with id 1
這是現有的用戶,因爲firstOrFail()
執行:
User::where('name', 'Joe')->first();
下一頁例如:
$user = User::firstOrCreate(['name' => 'Joe', 'created_at' => '2015-10-01 01:00:00']);
// $user = record with id 1
這使用戶返回,因爲罩下的執行以下查詢:
User::where('name', 'Joe')->where('created_at', '2015-10-01 01:00:00')->first();
$user = User::firstOrCreate(['name' => 'Joe', 'created_at' => '2020-10-01 01:00:00']);
// $user = a brand new user, as the created_at time is different
firstOrCreate()
方法所做的是檢查記錄是否存在您傳遞給它的屬性。
所以,取最後一個例子,它之所以創造了一個新紀錄,是因爲它評價:
User::where('name', 'Joe')->where('created_at', '2020-10-01 01:00:00')->first();
這當然會失敗。
總之,使用firstOrCreate
時,沒有傳遞created_at
屬性,因爲始終是動態創建的,在很多情況下,你可能不希望包括creator_id
。
來源
2015-10-19 16:38:19
Amo
謝謝,它是有道理的 –