堅持

除了使用 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'),
]);

createupdate 方法使得處理大型資料集比單獨設定每個鍵/值對要簡單得多,如以下示例所示:

注意在收集請求資料時使用 onlyexcept。指定要允許/禁止更新的確切金鑰非常重要,否則攻擊者可能會傳送帶有請求的其他欄位並導致意外更新。

// 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);