从CakePHP模式中的表中省略大多数列

时间:2015-07-28 11:05:27

标签: php sql-server cakephp cakephp-2.5

我有一个链接到CakePHP(2.5.3)应用程序的遗留数据库。数据库在其所有表中都有很多列,其中许多是完全未使用的(例如,在一个表中,我只需要80个空白列中的2列),因此我总是必须指定“字段”我运行一个查询。我在别处读到我可以通过在模型中使用这样的代码来取消设置字段:

function beforeFind($query) {
  $this->schema();

  unset($this->_schema['ColumnName']);
  unset($this->_schema['ColumnName2']);
  etc.
}

这似乎工作正常,问题是我正在使用80多行代码来取消设置列,而实际上我只需要设置两个。有没有办法强制CakePHP让我手动定义架构中的列?

我已尝试在模型开头声明$ _schema变量,这似乎没有帮助。

1 个答案:

答案 0 :(得分:2)

覆盖Model :: schema

Model::schema是告诉CakePHP存在哪些字段的方法,您只需要覆盖它以明确说明它应包含哪些字段,或者过滤掉您不想要的字段。

e.g:

function schema($field = false) {
    if (!is_array($this->_schema) || $field === true) {
        parent::schema();
        $keepTheseKeys = array_flip(['Column1', 'Column2']);
        $this->_schema = array_intersect_key($this->_schema, $keepTheseKeys);
    }

    return parent::schema($field);
}