我在哪里或如何告诉 CakePHP (2.x) 忽略数据库中的视图,以便它只与表一起工作?

Where or how do I tell CakePHP (2.x) to ignore the Views in a database, so that it works only with the Tables?

我有一个 CakePHP 2.x 应用程序 运行 一个 MySQL 数据库。

另一个开发人员出于另一个目的在另一个应用程序中(在 Asp.Net 中)在数据库本身中创建了一些 MySQL 视图。

这些视图似乎让我的 CakePHP 应用程序感到困惑,因为它将它们作为表格并在键、关系等方面搞乱了一些东西。

有没有办法或地方让我告诉我的 CakePHP 应用程序它不需要担心这些视图,只需像以前一样继续使用表?

对于您的 CakePHP 应用程序使用的每个 table 模型,定义 table 属性

如果 table 没有关联的 Model,您必须创建它

class Somemodel extends AppModel{

    public $table = "somemodels";

}

在继续阅读 CakePHP 如何与 MySQL 数据库一起工作并研究 MySQL 语法之后,我想出了下面的解决方案并且它有效。我在这里 post 为可能需要它的其他人提供 and/or 为更有经验的开发人员提供 post 这是一个好主意。

我找到了 CakePHP 从数据库中抓取表的文件:

/lib/Cake/Model/Datasource/Database/Mysql.php

我找到了完成这项工作的代码行:

$result = $this->_execute('SHOW TABLES FROM ' . $this->name($this->config['database']));

注意 MySQL 语句,特别是:

'SHOW TABLES FROM ' . $this->name($this->config['database'])

阅读 SHOW TABLES 文档,我了解了它的作用及其语法:https://dev.mysql.com/doc/refman/5.7/en/show-tables.html

所以,我把语句改成了:

'SHOW FULL TABLES FROM ' . $this->name($this->config['database']) . ' WHERE Table_Type != "VIEW"'

基本上:

  1. 我将 SHOW TABLES 更改为 SHOW FULL TABLES 以便它包含第二列,该列包含常规表的 BASE TABLE 和视图的 VIEW

  2. 然后,我在我添加的 WHERE 语句中使用第二列信息:WHERE Table_Type != "VIEW"' 从结果中过滤视图。

新的最后一行是:

$result = $this->_execute('SHOW FULL TABLES FROM ' . $this->name($this->config['database']) . ' WHERE Table_Type != "VIEW"' );

该应用程序似乎再次完美运行!