2017-02-23 53 views
0

我有一個運行MySQL數據庫的CakePHP 2.x應用程序。我在哪裏或如何告訴CakePHP(2.x)忽略數據庫中的視圖,以便它僅適用於表?

另一個開發者,爲了另一個應用程序(在Asp.Net中)的另一個目的,在數據​​庫本身中創建了一些MySQL視圖。

這些觀點似乎混淆了我的CakePHP的應用程序,因爲它是把他們作爲表和搞亂一些東西在的鑰匙,關係條款等

有沒有一種方法或地方我告訴我的CakePHP應用程序,它不需要擔心這些視圖,只是像以前一樣繼續使用表格。

回答

0

繼續閱讀後如何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"');

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

0

爲了您的CakePHP應用程序使用的每個表的模型,定義table屬性

如果表不具有相關聯的Model,你必須創建它

class Somemodel extends AppModel{ 

    public $table = "somemodels"; 

} 
+0

那麼這是最好的方法去做呢?一個一個地聲明每個模型的表格?我不能只是添加一些配置或cmd代碼的地方說忽視視圖? – vivipoit

+0

你會告訴我你的應用程序有什麼樣的混淆。事實上這種情況很奇怪,而且我一直在使用表格,我的應用程序並沒有使用,而且一切正常。 –

+1

因此,這個應用程序一直沒有使用表格。沒關係。問題在於,這個其他人所做的觀點是爲了他的目的而將不同的事情聯繫起來,這意味着CakePHP的閱讀關係也不同。其中一個視圖直接更改關聯。我發現了一些似乎可行的東西。我即將發佈它,並希望反饋意見是可以的。 – vivipoit

相關問題