TYPO3 获取最新插入的数据id

原文链接:https://www.whongbin.cn/index/article/detail/id/29.html

TYPO3 获取最新插入的数据uid

typo3是德国人开发的一套易用型CMS,采用插件方式拼装系统,系统完全面向对象,当然原生SQL也可以用来处理部分数据,这篇文章分享下typo3中怎么样获取新插入数据的ID

插入对象时获取方式

上面已经说了,typo3是完全面向对象的,在typo3中,对于一对一、一对多、多对一、多对多的关系有着非常友好的处理方式

/**
 * action create
 *
 * @param \Whb\ExtensionName\Domain\Model\Files $newFiles
 * @return void
 */
public function createAction(\Whb\ExtensionName\Domain\Model\Files $newFiles)
{
    #...数据插入代码...
    $newFiles->setTitle('demo');
    $this->addFlashMessage('添加成功!', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING);
    $this->filesRepository->add($newFiles);
    //主要是下面两句
    $persistenceManager = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class);
    $persistenceManager->persistAll();
    $newDataId = $newFiles->getUid();
    var_dump($newDataId);//返回新增数据的主键uid
    //$this->redirect('list');
}

使用助手SQL函数进行插入时

虽然说typo3是完全面向对象的,但是也免不了有时会出现特殊情况,这时候就可以使用typo3自带的SQL助手函数来插入数据

//添加一條纪录
$datas = array();
$datas["items"]= 2;
$datas["getnum"]= 3;
$datas["usednum"]= 0;
$datas["userid"]= 1;
$datas["crdate"]= time();
$datas["pid"]= 110;

$GLOBALS['TYPO3_DB']->exec_INSERTquery("tx_demo_domain_model_table", $datas);
$newDataUid = $GLOBALS['TYPO3_DB']->sql_insert_id();

使用原生MySQL插入时

在typo3中,我们依然可以使用原生MySQL进行插入数据,如处理远程api中数据修改时,例如支付宝的支付回调,就可以用到下面方法进行处理,免去繁琐的model类继承,但是需要自己写MySQL连接池

$con = new mysqli($config['host'],$config['user'],$config['password'],$config['dbname']);
if(!$con){
    die("connect error:".mysqli_connect_error());
}
//方法一 使用last_insert_id
$query = "select last_insert_id()";
$newDataUid = $con->execute($query);
//第二种
$query = "select max(uid) from table";
$newDataUid = $con->execute($query);

注意:所有返回自增ID只能是insert操作,而不是update操作

你可能感兴趣的:(TYPO3 获取最新插入的数据id)