【问题标题】:yii2 - how to truncate a table from consoleyii2 - 如何从控制台截断表格
【发布时间】:2016-02-17 15:10:32
【问题描述】:

我创建了一个控制台命令,我需要截断一个表。

阅读类参考:http://www.yiiframework.com/doc-2.0/yii-db-command.html#truncateTable()-detail 我无法理解执行此命令需要包含哪些文件。

我包括:

use yii\db\Command;
use yii\db\Connection;

但不确定哪个是正确的。

我已经尝试执行:

$command = Yii::$app->db->truncateTable('user');

这给了我以下错误:

异常 'yii\base\UnknownMethodException' 带有消息 'Calling unknown method: yii\db\Connection::truncateTable()'

和:

Yii::$connection->createCommand()->truncateTable('user');

这给了我以下错误:

PHP 致命错误“yii\base\ErrorException”并带有消息“访问未声明的静态属性:Yii::$connection”

我真的不明白我需要做什么。

【问题讨论】:

    标签: php yii2


    【解决方案1】:
    Yii::$app->db->createCommand()->truncateTable('user')->execute();
    

    【讨论】:

    • 谢谢,这很好用,我只是想知道为什么我不需要包含其他文件(使用 yii\base\Component; 使用 yii\di\Instance;)
    • 阅读文档后,您如何理解这是命令的执行方式?
    • $app 它是一个应用程序单调对象。在配置中你可以看到components 配置有db 组件。我并不是说你可以通过这种方式访问​​组件:Yii::$app->db。接下来只需使用组件方法(在您的情况下是yii\db\Connection)。
    【解决方案2】:

    使用 yii2 迁移该默认功能

    yii2 migrate

    第 1 步。创建迁移

    yii migrate/create truncate_table_xxx

    步骤 2。编辑文件xxx_truncate_table_xxx

    类似的东西

    class m150101_185401_truncate_table_xxx extends Migration
    {
       $this->dropTable('xxx')
    }
    

    【讨论】:

    • 谢谢,我相信您的解决方案会起作用,但我想在另一个控制台控制器中执行此操作,这就是为什么我想知道我需要包含哪些文件以及如何制定来自另一个的相同调用文件
    • 所以你的解决方案是 Onedev.Link 的 anwser。 Yii::$app->db->createCommand()->truncateTable('user')->execute();
    • 谢谢,但是你怎么能理解,阅读文档,这是命令的执行方式?
    • 请阅读 [yiiframework.com/] 页面。但我通常使用 IDE 建议的自动完成功能,例如 phpstorm。您可以阅读框架的源代码。最好的方式
    • 感谢您的帮助!
    【解决方案3】:

    也可以使用:

    User::deleteAll();
    

    假设User 是活动模型类。 此命令显示已删除记录的数量。

    请注意,与truncate 不同,删除所有记录不会将自动增量计数器重置为1

    【讨论】:

    • ...而且速度可能很慢。
    猜你喜欢
    • 2012-10-21
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2016-03-19
    • 2012-01-28
    • 2020-05-28
    相关资源
    最近更新 更多