我在哪里或如何告诉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"'
基本上是:
我将
SHOW TABLES
更改为SHOW FULL TABLES
,以便它包含第二个对于常规表格保存BASE TABLE
,对于视图保存VIEW
。然后,我在
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";
}
那么这是最好的方法去做呢?一个一个地声明每个模型的表格?我不能只是添加一些配置或cmd代码的地方说忽视视图? – vivipoit
你会告诉我你的应用程序有什么样的混淆。事实上这种情况很奇怪,而且我一直在使用表格,我的应用程序并没有使用,而且一切正常。 –
因此,这个应用程序一直没有使用表格。没关系。问题在于,这个其他人所做的观点是为了他的目的而将不同的事情联系起来,这意味着CakePHP的阅读关系也不同。其中一个视图直接更改关联。我发现了一些似乎可行的东西。我即将发布它,并希望反馈意见是可以的。 – vivipoit