2013-06-27 70 views
1

我在CakePHP 2.0應用程序中創建了一個庫類文件。這是一個名爲emailManager的PHP類,它存在於CakePHP的libaray文件夾中的文件夾emailManager中。我很想知道從這個庫類引用數據庫的最簡單方法是什麼。如何從CakePHP庫引用數據庫

我希望能夠做到像$this->AppModel->query("SELECT * FROM some_table_in_my_db")這樣的事情,這樣我就不必在單獨的地方跟蹤數據庫配置,但我不知道如何實現這一點。

另外,我覺得一提的是我與工作表不堅持CakePHP的表的命名規則是很重要的。他們早於CakePHP的使用,所以我不能更改我的表以適應CakePHP的模型格式。這就是爲什麼我要像query

編輯通過一些通用數據庫訪問:我已經建立了一個臨時的解決方案,但我知道一個更好的一個是可能的。 我有我叫MySimpleConstuct和蛋糕的應用程序的模型,然後在庫文件我包括MySimpleConstruct型號如下:

// import this model 
$this->GivenModel = ClassRegistry::init('MySimpleConstruct'); 
$this->GivenModel = new MySimpleConstruct(); 

// Then it is possible to do as followed: 
$table_data = $this->GivenModel->query('SELECT * FROM like_some_table_dude' WHERE 1); 

這是不理想的,所以我仍然在尋找更好的解決方案。 任何幫助將不勝感激。

+0

重複的? – azBrian

+0

@azBrian我不認爲是,問題是相關的,但這是我在準備這個問題時所審查的問題之一。對於如何構建比我在這裏描述的編輯更好的解決方案,您有任何建議嗎?對於比我使用的更好的答案,我仍然非常感興趣。 – usumoio

回答

1

@約翰高爾特,我想這不是一個確切的重複,但它是非常相似,分辨率確實出現了非常直接適用於你的情況。 你可以考慮使用的另一種技術是在控制器中實例化庫,然後給它一個模型的參考。

class TestController extends AppController { 
    function index(){ 
     App::uses('TheLibrary', 'Lib'); 
     $obj = new TheLibrary(); 
     $obj->GivenModel = &$this->GivenModel; 
    } 
} 

CNC中 然後在庫中你寫的做這樣的事情。

class TheLibrary { 
    var $GivenModel = null; 

    function some_query(){ 
     return $this->GivenModel->query('SELECT * FROM like_some_table_dude WHERE 1'); 
    } 
} 

第一代碼片段是控制器實例化你的庫中,然後給圖書館作爲財產GivenModel示範的引用。 「&」符號使分配成爲參考(請參閱How does the '&' symbol in PHP affect the outcome?)。第二個代碼片段是庫如何使用該屬性的示例。

我也知道,您要使用的模型從庫,這就是你的編輯你有解決方案,我建議的解決方案都這樣做。不過,我會再次注意到,這不是適當的MVC約定,你應該重新考慮你如何使用庫。

+0

好吧,我現在想我明白混亂是從哪裏來的。我沒有解釋得很好。我正在尋找一種方法來引用庫中主應用程序的數據庫。我認爲我給人的印象是我正在尋找一種方式來從應用程序中的模型中引用庫,這不是我遇到的麻煩。謝謝你。我會在稍後檢查你的'&'符號。 – usumoio

+0

嗯,編輯你的問題很有趣。我會在漫長的工作日之後回顧這一點。乾杯兄弟。 – usumoio