我在哪里或如何告诉CakePHP(2.x)忽略数据库中的视图,以便它只适用于表?

时间:2017-02-23 17:52:39

标签: mysql cakephp cakephp-2.3

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

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

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

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

2 个答案:

答案 0 :(得分:0)

对于CakePHP应用程序正在使用的每个表模型,请定义table属性

如果表格没有关联Model,则必须创建

class Somemodel extends AppModel{

    public $table = "somemodels";

}

答案 1 :(得分:0)

继续阅读CakePHP如何使用MySQL数据库并研究MySQL语法之后,我想出了下面的解决方案并且它有效。我在这里发布它可能需要它的其他人和/或更有经验的开发人员发布或不是这个是一个好主意。

我找到了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 TABLEVIEW视图。

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

  3. 新的最后一行是:

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

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