新增
添加一條數(shù)據(jù)
insert()
方法,返回值為bool
類型的值,返回值為true
表示添加成功,返回值為false
表示添加失敗。
第一種是實(shí)例化模型對象后賦值并保存:
<?php
$user = new User();
$user->name = 'easyswoole';
$user->email = 'easyswoole@qq.com';
$user->insert();
// 相當(dāng)于 sql: INSERT INTO `easyswoole_user` (`name`, `email`) VALUES ('easyswoole', 'easyswoole@qq.com')
也可以使用 setData
方法批量賦值:
<?php
$user = new User();
$user->setData([
'name' => 'easyswoole',
'email' => 'easyswoole@qq.com'
]);
$user->insert();
或者直接在實(shí)例化的時(shí)候傳入數(shù)據(jù)
<?php
$user = new User([
'name' => 'easyswoole',
'email' => 'easyswoole@qq.com'
]);
$user->insert();
獲取自增ID
如果要獲取新增數(shù)據(jù)的自增ID,可以使用下面的方式:
<?php
$user = new User();
$user->name = 'easyswoole';
$user->email = 'easyswoole@qq.com';
$user->insert();
// 獲取自增ID
echo $user->id;
注意這里其實(shí)是獲取模型的主鍵,如果你的主鍵不是 id
,而是 user_id
的話,其實(shí)獲取自增ID就變成這樣:
<?php
$user = new User();
$user->name = 'easyswoole';
$user->email = 'easyswoole@qq.com';
$user->insert();
// 獲取自增ID
echo $user->user_id;
添加多條數(shù)據(jù)
insertAll()
方法新增數(shù)據(jù)返回的是包含新增模型(帶自增ID)的對象數(shù)組 或 普通數(shù)組。
insertAll()
方法的返回類型受模型的queryLimit
屬性 的fields
屬性的returnAsArray
屬性影響(可能返回普通數(shù)組)。
支持批量新增,可以使用:
<?php
$user = new User();
$list = [
['name' => 'easyswoole-1', 'email' => 'easyswoole1@qq.com'],
['name' => 'easyswoole-2', 'email' => 'easyswoole2@qq.com']
];
$user->insertAll($list); // 結(jié)果為 對象數(shù)組
$user = new User();
$list = [
['name' => 'easyswoole-1', 'email' => 'easyswoole1@qq.com'],
['name' => 'easyswoole-2', 'email' => 'easyswoole2@qq.com']
];
$user->queryLimit()->fields(null, true);
$user->insertAll($list); // 結(jié)果為 普通數(shù)組
insertAll
方法新增數(shù)據(jù)默認(rèn)會(huì)自動(dòng)識(shí)別數(shù)據(jù)是需要新增還是更新操作,當(dāng)數(shù)據(jù)中存在主鍵的時(shí)候會(huì)認(rèn)為是更新操作,如果你需要帶主鍵數(shù)據(jù)批量新增,可以使用下面的方式:
<?php
$user = new User;
$list = [
['id' => 1, 'name' => 'easyswoole-1', 'email' => 'easyswoole1@qq.com'],
['id' => 2, 'name' => 'easyswoole-2', 'email' => 'easyswoole2@qq.com']
];
$user->insertAll($list, false);
onInsert注解
修改 User
模型類文件,添加 OnInsert
注解 和 onInsert
方法,onInsert
方法用于對添加前的數(shù)據(jù)做一些處理。
User.php
<?php
declare(strict_types=1);
namespace App\Model;
use EasySwoole\FastDb\AbstractInterface\AbstractEntity;
use EasySwoole\FastDb\Attributes\Hook\OnInsert;
// ...
/**
* @property int $id
* @property string $name
* @property int $status
* @property int $create_time
* @property string $email
*/
#[OnInsert('onInsert')]
class User extends AbstractEntity
{
// ...
public function onInsert()
{
if (empty($this->create_time)) {
$this->create_time = time();
}
if (empty($this->status)) {
$this->status = 1;
}
}
}
然后嘗試新增數(shù)據(jù)
<?php
$user = new User();
$user->name = 'easyswoole';
$user->email = 'easyswoole@qq.com';
$user->insert(); // INSERT INTO `easyswoole_user` (`name`, `status`, `create_time`, `email`) VALUES ('easyswoole', 1, 1704521166, 'easyswoole@qq.com')
ON DUPLICATE KEY UPDATE
<?php
$user = new User();
$user->name = 'easyswoole100';
$updateDuplicateCols = ['name'];
$user->insert($updateDuplicateCols); // INSERT INTO `easyswoole_user` (`name`, `status`, `create_time`) VALUES ('easyswoole100', 1, 1704521621) ON DUPLICATE KEY UPDATE `name` = 'easyswoole100'
$user = new User();
$user->name = 'easyswoole100';
$updateDuplicateCols = ['name', 'id' => 1];
$user->insert($updateDuplicateCols); // INSERT INTO `easyswoole_user` (`name`, `status`, `create_time`) VALUES ('easyswoole100', 1, 1704521622) ON DUPLICATE KEY UPDATE `id` = 1, `name` = 'easyswoole100'