【问题标题】:How to use table prefix for CakePHP plugins?如何为 CakePHP 插件使用表前缀?
【发布时间】:2013-10-20 12:40:49
【问题描述】:

我想写一个插件,它有自己的数据库表。我没有从 schema.php 文件创建表,而是手动创建它们。然后我想为那个插件烘焙模型。但我也希望 cake bake shell 能够识别带前缀的表名并理解它们属于该插件,因此只有带前缀的表才会显示在 shell 的选项中。

为了澄清,插件可能有自己的架构。因此,有时不同插件的表名可能会发生冲突。为了避免任何冲突,我想可以使用表前缀。是否可以为 CakePHP 插件使用表前缀?如果答案是肯定的,那么如何为插件配置表前缀?我的偏好是不要触摸 app/Config/database.php 文件。相反,最好在插件本身中设置任何配置。

附:我正在使用 CakePHP 2.4.1

【问题讨论】:

    标签: cakephp plugins prefix


    【解决方案1】:

    在你的插件模型中使用$tablePrefix

    <?php
    // Plugin/Example/Model/ExampleAppModel.php
    
    App::uses('AppModel', 'Model');
    class ExampleAppModel extends AppModel {
    
    /**
     *  Table prefix
     */
        public $tablePrefix = 'example_';
    }
    

    然后,您在 Example 插件中的所有模型都将使用 example_ 前缀

    【讨论】:

    • 没关系,但是当您尝试为表“example_awesometable”烘焙模型时,烘焙 shell 会显示数据库中的所有表。它也没有省略前缀,因此它为 example_awesometable 打印 ExampleAwesometable。您可以通过运行以下命令自己尝试查看:./Console/cake bake model --plugin Example
    • 在为具有不同 $tablePrefix 的插件烘焙模型之前,转到 Config/database.php 并将 'prefix' 参数更改为 'example_'。烘焙后将“前缀”参数更改为之前的值。
    【解决方案2】:

    我花了一段时间才弄明白。我在文档上发现不是很清楚。

    在您的默认数据库上无需每次都更改它。

    只需在 app/Config/database.php 中添加一个包含您的前缀的数据库连接,并在烘焙时选择它。

    如果可用,请使用 --connection, -c 参数在命令中指示您的数据库(请参阅 bake 的帮助)

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2018-04-06
      • 2014-02-19
      • 2011-05-15
      相关资源
      最近更新 更多