堅持
除了使用 Eloquent 讀取資料外,你還可以使用它來使用 save()
方法插入或更新資料。如果你已建立新模型例項,則將插入記錄 ; 否則,如果你從資料庫中檢索了模型並設定了新值,則會更新它。
在這個例子中,我們建立了一個新的 User
記錄:
$user = new User();
$user->first_name = 'John';
$user->last_name = 'Doe';
$user->email = 'john.doe@example.com';
$user->password = bcrypt('my_password');
$user->save();
你還可以使用 create
方法使用資料陣列填充欄位:
User::create([
'first_name'=> 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'password' => bcrypt('changeme'),
]);
使用 create 方法時,應在模型中的 fillable
陣列中宣告屬性:
class User extends Model
{
protected $fillable = [
'first_name',
'last_name',
'email',
'password',
];
}
或者,如果你想使所有屬性都可以分配,你可以將$ guarded 屬性定義為空陣列:
class User extends Model
{
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
}
但是你也可以使用 forceCreate
方法而不是 create
方法建立一個記錄,甚至不用改變模型中的 fillable
屬性
User::forceCreate([
'first_name'=> 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'password' => bcrypt('changeme'),
]);
以下是通過首先載入(通過使用 find
),修改它,然後儲存它來更新現有 User
模型的示例:
$user = User::find(1);
$user->password = bcrypt('my_new_password');
$user->save();
要通過單個函式呼叫完成相同的專長,你可以使用 update
方法:
$user->update([
'password' => bcrypt('my_new_password'),
]);
create
和 update
方法使得處理大型資料集比單獨設定每個鍵/值對要簡單得多,如以下示例所示:
注意在收集請求資料時使用
only
和except
。指定要允許/禁止更新的確切金鑰非常重要,否則攻擊者可能會傳送帶有請求的其他欄位並導致意外更新。
// Updating a user from specific request data
$data = Request::only(['first_name', 'email']);
$user->find(1);
$user->update($data);
// Create a user from specific request data
$data = Request::except(['_token', 'profile_picture', 'profile_name']);
$user->create($data);