勾股OA在线文档

extra 与 duplicate

extra

extra方法可以用于CURD查询,例如:

Db::name('user')->extra('IGNORE')->insert(['name' => 'think']);
Db::name('user')->extra('DELAYED')->insert(['name' => 'think']);
Db::name('user')->extra('SQL_BUFFER_RESULT')->select();

1、extra('IGNORE') 配合 insert( ):插入指定字段对应的值,而其他字段被忽略且对应值为缺省值。
2、DELAYED关键字 延迟 已经在【Mysql 5.6被废弃】,服务器可以接收,但是会忽略这个关键字
3、extra('SQL_BUFFER_RESULT') 配合select() :查询缓存的结果

duplicate

DUPLICATE查询的用法示例:

Db::name('user')->duplicate(['score' => 10])->insert(['name' => 'think']);

当主键重复的记录存在时,更新score,不存在时,新增一条数据。

数据库链式操作之extraduplicate结合使用的案例:

$inserData = array(
    array('nickname'=>'helloWorld','email'=>'helloWorld@slong.ink'),
    array('nickname'=>'helloPHP','email'=>'helloWorld@slong.ink')
);
$sql = Db::name('user')
    ->extra('IGNORE')->duplicate(array(
        'nickname',
        'email',
        'update_time' => time()
    ))->fetchSql(true)->insertAll($inserData);

生成的sql是:

INSERT IGNORE INTO `user` (`nickname` , `email`) 
VALUES ( 'helloWorld','helloWorld@slong.ink' ) , ( 'helloPHP','helloWorld@slong.ink' )
ON DUPLICATE KEY UPDATE `nickname` = VALUES(nickname) , `email` = VALUES(email) , `update_time` = 1618224366