新增
新增(zeng)數據(ju)有多種方(fang)式。
添加一條數據
第一種是實例化模型(xing)對象(xiang)后賦(fu)值并保存:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
也可以使用data方法批量賦值:
$user = new User;
$user->data([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
]);
$user->save();
或者直接在實(shi)例化的時候傳入數據
$user = new User([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
]);
$user->save();
如果需要過(guo)濾(lv)非數(shu)據表字段的數(shu)據,可以使用:
$user = new User($_POST);
// 過濾post數(shu)組中的非(fei)數(shu)據(ju)(ju)表字(zi)段數(shu)據(ju)(ju)
$user->allowField(true)->save();
如(ru)果你通過(guo)外(wai)部提交賦(fu)值給模型,并且(qie)希(xi)望(wang)指定某些字段(duan)寫入,可以使(shi)用:
$user = new User($_POST);
// post數(shu)組(zu)中(zhong)只有name和email字段會寫入
$user->allowField(['name','email'])->save();
save方法新增(zeng)數(shu)據返回的是寫入的記(ji)錄數(shu)。
獲取自增ID
如果要獲取新增數(shu)據(ju)的自增ID,可以使用下面的方式:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
// 獲(huo)取自增ID
echo $user->id;
注意這里其實是獲取模型的主鍵,如果你的主鍵不是id,而是user_id的(de)話,其實獲取自(zi)增ID就(jiu)變成這樣:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
// 獲取自增ID
echo $user->user_id;
注意不要(yao)在同一個實例里面多次(ci)新增(zeng)數據,如果確實需要(yao)多次(ci)新增(zeng),那么可以用下面的方式:
$user = new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
$user->name = 'onethink';
$user->email = 'onethink@qq.com';
// 第二次(ci)開始必須使用下面的方式新增
$user->isUpdate(false)->save();
添加多條數據
支持批量(liang)新增(zeng),可以使(shi)用:
$user = new User;
$list = [
['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);
saveAll方法(fa)新(xin)增(zeng)數據返回的(de)是包含新(xin)增(zeng)模型(帶(dai)自增(zeng)ID)的(de)數據集(數組(zu))。
V5.0.13+版本開始,saveAll方法的返回類型受模型的resultSetType屬性(xing)影響(可(ke)能返回數據集對象)。
saveAll方(fang)法(fa)新(xin)增數(shu)據默認(ren)會自動(dong)識(shi)別數(shu)據是需要(yao)新(xin)增還是更(geng)(geng)新(xin)操(cao)作(zuo),當數(shu)據中存在主鍵的時候會認(ren)為是更(geng)(geng)新(xin)操(cao)作(zuo),如果你需要(yao)帶主鍵數(shu)據批量(liang)新(xin)增,可以使用(yong)下面的方(fang)式(shi):
$user = new User;
$list = [
['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com'],
];
$user->saveAll($list, false);
靜態方法
還可以直接靜態調用create方法創建并寫入:
$user = User::create([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
]);
echo $user->name;
echo $user->email;
echo $user->id; // 獲取自(zi)增ID
和(he)save方法不同的是,create方法返回的是當前模型的對象實例。
助手函數
系統提供了(le)model助手函數(shu)用于快速實(shi)例化模型,并且使用單例實(shi)現,例如(ru):
// 使用(yong)model助手函數實例化User模型
$user = model('User');
// 模型(xing)對象賦值(zhi)
$user->data([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
]);
$user->save();
或者進行批量新增:
$user = model('User');
// 批量新增
$list = [
['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);
