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

问题描述:

我有一个运行MySQL数据库的CakePHP 2.x应用程序。我在哪里或如何告诉CakePHP(2.x)忽略数据库中的视图,以便它仅适用于表?

另一个开发者,为了另一个应用程序(在Asp.Net中)的另一个目的,在数据​​库本身中创建了一些MySQL视图。

这些观点似乎混淆了我的CakePHP的应用程序,因为它是把他们作为表和搞乱一些东西在的钥匙,关系条款等

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

继续阅读后如何CakePHP的与MySQL数据库一起工作,并研究MySQL语法,我提出了下面的解决方案,它工作。我把它发布给其他可能需要它的人和/或更有经验的开发人员发布,而不是这是一个好主意。

我发现这里的CakePHP抓住从数据库中的表文件:

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

我发现的代码做这件工作线:

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

注意MySQL的声明,especifically:

'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"');

的应用程序似乎是完美工作了!

为了您的CakePHP应用程序使用的每个表的模型,定义table属性

如果表不具有相关联的Model,你必须创建它

class Somemodel extends AppModel{ 

    public $table = "somemodels"; 

} 
+0

那么这是最好的方法去做呢?一个一个地声明每个模型的表格?我不能只是添加一些配置或cmd代码的地方说忽视视图? – vivipoit

+0

你会告诉我你的应用程序有什么样的混淆。事实上这种情况很奇怪,而且我一直在使用表格,我的应用程序并没有使用,而且一切正常。 –

+1

因此,这个应用程序一直没有使用表格。没关系。问题在于,这个其他人所做的观点是为了他的目的而将不同的事情联系起来,这意味着CakePHP的阅读关系也不同。其中一个视图直接更改关联。我发现了一些似乎可行的东西。我即将发布它,并希望反馈意见是可以的。 – vivipoit