Magento 设置脚本中的 ALTER TABLE 不使用 SQL

2024-05-16

乔纳森·戴 https://stackoverflow.com/users/336905/jonathan-day says

“更新不应采用以下形式 SQL命令”。我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结构。

(在问题中如何将配置更改从开发环境迁移到生产环境? https://stackoverflow.com/q/4208030/471559)

我想知道如何最好地以这种方式向表添加/修改/删除列或索引,但不依赖 SQL?有可能吗?

此外,还有哪些操作只能在 SQL 中完成?


您可以在安装脚本中使用此类方法:

  • Use Varien_Db_Ddl_Table类来创建新表,您可以在其中组合配置所有字段、键、关系$this->getConnection()->createTable($tableObject)例子:

    /* @var $this Mage_Core_Model_Resource_Setup */
    $table = new Varien_Db_Ddl_Table();
    $table->setName($this->getTable('module/table'));
    $table->addColumn('id', Varien_Db_Ddl_Table::TYPE_INT, 10, 
                      array('unsigned' => true, 'primary' => true));
    
    $table->addColumn('name', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255);
    $table->addIndex('name', 'name');
    $table->setOption('type', 'InnoDB');
    $table->setOption('charset', 'utf8');
    
    $this->getConnection()->createTable($table);
    
  • 使用设置连接($this->getConnection()) 方法:

    • addColumn() method adds new column to exiting table. It has such parameters:
      • $tableName- 需要修改的表名
      • $columnName- 应添加的列的名称
      • $definition- 列的定义(INT(10), DECIMAL(12,4), etc)
    • addConstraint() method creates a new constraint foreign key. It has such parameters
      • $fkName- 外键名称,如果您不指定,每个数据库应该是唯一的FK_前缀,会自动添加
      • $tableName- 添加外键的表名
      • $columnName- 应该引用另一表的列名,如果您有复杂的外键,请使用逗号指定多个列
      • $refTableName- 将要处理的外部表名称
      • $refColumnName- 外部表中的列名
      • $onDelete- 在外部表中删除行的操作。可以是空字符串(什么都不做),cascade, set null。该字段是可选的,如果不指定,cascade将使用值。
      • $onUpdate对外表中行键更新的操作。可以是空字符串(什么都不做),cascade, set null。该字段是可选的,如果不指定,cascade将使用值。
      • $purge- 用于在添加外键后启用行清理的标志(例如删除未引用的记录)
    • addKey() method is used for adding of indexes to a table. It has such parameters:
      • $tableName- 应添加索引的表名
      • $indexName- 索引名称
      • $fields- 索引中使用的列名
      • $indexType- 索引的类型。可能的值为:index, unique, primary, fulltext。该参数是可选的,因此默认值为index
    • dropColumn() method is used for removing of columns from the existing table. It has such parameters:
      • $tableName- 需要修改的表名
      • $columnName- 应删除的列的名称
    • dropForeignKey() method is used for removing of foreign keys. It has such parameters:
      • $tableName- 删除外键的表名
      • $fkName- 外键名称
    • dropKey() method is used for removing of the table indexes. It has such parameters:
      • $tableName- 应删除索引的表名
      • $keyName- 索引名称
    • modifyColumn method is used to modify existing column in the table. It has such parameters:
      • $tableName- 需要修改的表名
      • $columnName- 应该重命名的列的名称
      • $definition- 列的新定义(INT(10), DECIMAL(12,4), etc)
    • changeColumn method is used to modify and rename existing column in the table. It has such parameters:
      • $tableName- 需要修改的表名
      • $oldColumnName- 列的旧名称,应重命名和修改
      • $newColumnName- 列的新名称
      • $definition- 列的新定义(INT(10), DECIMAL(12,4), etc)
    • changeTableEngine method is used to change table engine, from MyISAM to InnoDB for instance. It has such parameters:
      • $tableName- 表名
      • $engine- 新引擎名称(MEMORY, MyISAM, InnoDB, etc)

您也可以使用tableColumnExists检查列是否存在的方法。

这不是您可以使用的摆脱直接 SQL 查询编写的方法的完整列表。您可以在以下位置找到更多信息Varien_Db_Adapter_Pdo_Mysql and Zend_Db_Adapter_Abstract类。

不要犹豫,查看您将要使用的类定义,您可以为自己找到很多有趣的东西:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magento 设置脚本中的 ALTER TABLE 不使用 SQL 的相关文章

  • 如何将JS/CSS文件包含到Slim框架的模板中?

    我正在使用 Slim 框架开发一个简单的网络应用程序 我遇到了一个可能很简单的问题 我想将静态文件 CSS 和 Javascript 包含到我的模板中 我的项目文件夹结构如下 index php lt where all the routi
  • 这是过滤数据并防止 SQL 注入和其他攻击的安全方法吗?

    我创建了两个简单的函数来在插入数据进入 mysql 查询之前对其进行过滤 对于表单字段 我还使用正则表达式来单独检查每个字段 Form filter function filter var HTML is not allowed var s
  • 如果端口不是 80,.htaccess 重定向到错误页面

    我正在运行一个便携式服务器 http www server2go web de 通过 USB 棒 问题是我还在我的本地计算机上安装了 WAMP 并且 Apache 不知何故在 Windows 启动时启动 因为一些我现在不记得的随机原因并且无
  • WooCommerce 自定义字段 - 多选

    我在 WooCommerce 的结账页面添加额外的字段 我可以添加文本框等基本字段 但需要添加一个 多 选择框 用户可以在其中选择多个项目 我已经弄清楚如何通过代码添加选择框 如下所示 add action woocommerce afte
  • 提交简单 PHP 表单时出现禁止错误

    我有一个不复杂的问题 这似乎比应有的更复杂 我有一个简单的表单 用于向网站添加内容 有些字段需要输入html 然而 当您在表单的不同部分输入某些 html 元素时 它会认为它讨厌您并抛出禁止的 403 错误 这是下面的表格
  • 与 PHP 相比,Python 与 HTML 的“流畅”程度如何?

    我正在考虑从使用 PHP 切换到使用 Python 来开发 Web 应用程序 但我想知道 Python 是否像 PHP 一样擅长在 HTML 中穿插 本质上 我发现它使用起来非常简单 直观将 PHP 放在我想要的位置 然后可以随意安排 组织
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • 如何将整行(在 SQL 中,而不是 PL/SQL 中)传递给存储函数?

    我遇到以下 非常简单 问题 我想编写一个 Oracle SQL 查询 大致如下 SELECT count MyFunc MyTable FROM MyTable GROUP BY MyFunc MyTable 在 PL SQL 中 可以使用
  • 如何对 SQL Server Express 进行实时更改

    我一直在使用 VS studio 开发一个 ASP NET Web 应用程序 我正在使用 SQL Server Express 在开发过程中 我一直在我的服务器上测试我的网络应用程序 每次我需要更新数据库时 我都会简单地删除旧数据库 位于我
  • ActiveRecord 嵌套 SELECT——我可以在没有手动 SQL 的情况下完成它吗?

    我有一张桌子 上面有 除其他外 一个名字和一个等级 我想返回所有唯一名称的集合 但对于返回的每个名称 我想选择排名最高的行 这很简单 有两个嵌套的 SELECT 语句 SELECT FROM SELECT FROM foo ORDER BY
  • 我应该在 Symfony 中哪里放置既不是控制器也不是模型的类?

    对于我的应用程序包 我需要一些既不是控制器也不是模型的类 例如 我想要一个scorecard具有诸如 技能 效率 美丽 等成员的类 此外 它可能具有诸如 meanScore 之类的成员方法 getters 这样的类在 Symfony 框架中
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • PHP 中正确的存储库模式设计?

    前言 我尝试在具有关系数据库的 MVC 架构中使用存储库模式 我最近开始学习 PHP 中的 TDD 并且我意识到我的数据库与应用程序的其余部分耦合得太紧密 我读过有关存储库并使用国际奥委会容器 http laravel com docs 4
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • 什么是 PHP session_start()

    它是否基于 cookie 启动当前会话 从 PHP 网站上得到的 PHP如何控制会话 如果我在用户打开我的登录页面时启动会话 我什至可以使用该会话做什么 我可以使用当前会话来获取有关登录用户的信息吗 PHP 会话系统允许您将数据安全地存储在
  • 访问 PHP 数组对象受保护的属性

    我正在尝试在 Symfony2 中上传多个文件 我正在尝试访问以下请求对象 但无法获取参数属性 如何将文件一一上传 我得到的错误 致命错误 无法访问第 66 行 var www File src Webmuch FileBundle Ent
  • Laravel 5 Eloquent 在多个级别上将关系附加到 JSON

    因此 在模型中包含关系非常容易 例如 class User extends Model protected with roles class Role extends Model protected with permissions 当有对
  • 计算树中值的总和(递归查询)

    我在表员工 id name parentid 中有树结构 并且该表可以嵌套 employees 与另一个具有列 id employeeid quantity 的 Sales 表是一对多关系 每个员工都有销售数量 我想计算每个员工以及儿童员工
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male

随机推荐