【问题标题】:CakePHP 3: Truncate a tableCakePHP 3:截断表格
【发布时间】:2016-11-07 10:59:45
【问题描述】:

如何使用 CakePHP 3.x 截断表格

我通过这个得到截断查询:

$this->Coupons->schema()->truncateSql($this->Coupons->connection());

但是执行它的最佳实践是什么

【问题讨论】:

    标签: orm cakephp-3.0


    【解决方案1】:

    此代码运行良好,感谢 @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中@。除此之外,通常是这样完成的,框架没有提供其他截断表的方法。
    【解决方案2】:

    CakePHP4 中,您可以使用以下代码截断表格:

    $table = $this->Coupons;
    $sqls = $table->getSchema()->truncateSql($table->getConnection());
    foreach ($sqls as $sql) {
      $table->getConnection()->execute($sql)->execute();
    }
    

    【讨论】:

      【解决方案3】:

      我测试了以下,它的工作原理:

        $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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2011-08-27
        • 2016-01-08
        相关资源
        最近更新 更多