【发布时间】:2016-11-07 10:59:45
【问题描述】:
如何使用 CakePHP 3.x 截断表格
我通过这个得到截断查询:
$this->Coupons->schema()->truncateSql($this->Coupons->connection());
但是执行它的最佳实践是什么
【问题讨论】:
标签: orm cakephp-3.0
如何使用 CakePHP 3.x 截断表格
我通过这个得到截断查询:
$this->Coupons->schema()->truncateSql($this->Coupons->connection());
但是执行它的最佳实践是什么
【问题讨论】:
标签: orm cakephp-3.0
此代码运行良好,感谢 @ndm 的评论帮助答案变得更好。
//In Coupons Controller
$this->Coupons->connection()->transactional(function ($conn) {
$sqls = $this->Coupons->schema()->truncateSql($this->Coupons->connection());
foreach ($sqls as $sql) {
$this->Coupons->connection()->execute($sql)->execute();
}
});
【讨论】:
$this->Coupons->connection(),也应该使用foreach来迭代并执行truncateSql()返回的所有可能的SQL语句,最后将其包装在@987654322中@。除此之外,通常是这样完成的,框架没有提供其他截断表的方法。
在 CakePHP4 中,您可以使用以下代码截断表格:
$table = $this->Coupons;
$sqls = $table->getSchema()->truncateSql($table->getConnection());
foreach ($sqls as $sql) {
$table->getConnection()->execute($sql)->execute();
}
【讨论】:
我测试了以下,它的工作原理:
$connection = $this->Coupons->getConnection();
$connection->query('TRUNCATE coupons');
参考:https://book.cakephp.org/4/en/orm/database-basics.html#executing-queries
在此处阅读更多信息:https://book.cakephp.org/4/en/orm/database-basics.html#using-transactions
【讨论】: