我有一個運行MySQL數據庫的CakePHP 2.x應用程序。我在哪裏或如何告訴CakePHP(2.x)忽略數據庫中的視圖,以便它僅適用於表?
另一個開發者,爲了另一個應用程序(在Asp.Net中)的另一個目的,在數據庫本身中創建了一些MySQL視圖。
這些觀點似乎混淆了我的CakePHP的應用程序,因爲它是把他們作爲表和搞亂一些東西在的鑰匙,關係條款等
有沒有一種方法或地方我告訴我的CakePHP應用程序,它不需要擔心這些視圖,只是像以前一樣繼續使用表格。
我有一個運行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