在 CakePHP 模式中省略表中的大部分列
Omit majority of columns from tables in CakePHP schema
我有一个链接到 CakePHP (2.5.3) 应用程序的遗留数据库。数据库在其所有 table 中都有很多列,其中许多完全未使用(例如在一个 table 中,我只需要 80 个空白列中的 2 个列),因此结果每当我 运行 查询时,我总是必须指定 'fields'。我在其他地方读到我可以通过在模型中使用这样的代码来取消设置字段:
function beforeFind($query) {
$this->schema();
unset($this->_schema['ColumnName']);
unset($this->_schema['ColumnName2']);
etc.
}
这似乎工作正常,问题是我使用了 80 多行代码来取消设置列,而实际上我只需要设置两行。有没有办法强制 CakePHP 让我手动定义模式中的列?
我试过在模型的开头声明 $_schema 变量,但似乎没有帮助。
覆盖Model::schema
Model::schema 是告诉 CakePHP 存在哪些字段的方法,您只需覆盖它以明确说明它应该包含哪些字段,或者过滤掉您不需要的字段。
例如:
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);
}
我有一个链接到 CakePHP (2.5.3) 应用程序的遗留数据库。数据库在其所有 table 中都有很多列,其中许多完全未使用(例如在一个 table 中,我只需要 80 个空白列中的 2 个列),因此结果每当我 运行 查询时,我总是必须指定 'fields'。我在其他地方读到我可以通过在模型中使用这样的代码来取消设置字段:
function beforeFind($query) {
$this->schema();
unset($this->_schema['ColumnName']);
unset($this->_schema['ColumnName2']);
etc.
}
这似乎工作正常,问题是我使用了 80 多行代码来取消设置列,而实际上我只需要设置两行。有没有办法强制 CakePHP 让我手动定义模式中的列?
我试过在模型的开头声明 $_schema 变量,但似乎没有帮助。
覆盖Model::schema
Model::schema 是告诉 CakePHP 存在哪些字段的方法,您只需覆盖它以明确说明它应该包含哪些字段,或者过滤掉您不需要的字段。
例如:
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);
}