2012-05-04 77 views
0

是否可以在CakePHP應用程序中創建模型並將該模型與根本不與CakePHP應用程序關聯的數據庫表關聯?將cakephp模型與non-cakephp數據庫表關聯

例如,該數據庫表屬於另一個應用程序,我們希望在CakePHP中使用該表創建一個模型(以使該表完全不符合CakePHP的約定)。我該怎麼做呢?我需要在我的模型中放置什麼才能使該關聯無需更改我的表格(我需要能夠在該表格上執行基本的CRUD操作)

有什麼想法嗎?

謝謝

+0

向我們展示了表的樣子,我們可能能夠幫助... –

回答

1

是的,你可以做到這一點。例如,如果您有idCandidat主鍵的表CAND,你創建一個模型,並使用$ useTable & $ PrimaryKey的屬性:

class Candidat extends AppModel{ 
var $name = 'Candidats'; 
var $useTable = 'cand'; 
var $primaryKey = 'idCandidat'; 
//etc. 
} 

,並在繼續使用模型控制器一樣,你會用做正常的。

0

您甚至可以使用完全不同的數據庫或不同的服務器上的表。爲此,您可以使用(我只會延長@chroonoss的例子,因爲它是正確的):

class Candidat extends AppModel{ 
var $name = 'Candidats'; 
var $useTable = 'cand'; 
var $primaryKey = 'idCandidat'; 

var $usedbConfig = 'external'; 
} 

這將允許您使用不同的數據源引黃。這些定義在: app/config/database.php。你必須有一個屬性名爲「外部」有這個例子的工作:

public $external = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host' => '101.180.10.17', 
     'login' => 'username', 
     'password' => 'yourTopSecretPassword', 
     'database' => 'database_name', 
     'prefix' => '', 
     'encoding' => 'utf8', 
    ); 

當然,只要你喜歡,你可以命名您的數據源。

+0

如果我想更改模型字段的名稱(例如,假設數據庫中有一個名爲「phone」的字段,但我希望模型將該字段稱爲「 telephone')。我會怎麼做呢?如果我不想將我的表中的所有列用於我的模型(假設我只想將表格的幾列與我的模型相關聯)。我會怎麼做? – user765368

+0

只需更改Model :: find()調用以包含:'fields'=> array('field1','field2','field3')。這樣find()函數的返回將只包含列出的字段。我個人不知道其他方式來改變模型本身。看看這個: http://book.cakephp.org/1.3/en/view/1017/Retrieving-Your-Data –

0

您可以查找功能設置字段(列) - http://book.cakephp.org/1.3/en/view/1018/find 或者,如果你想設置爲關聯字段,你可以這樣做:

var $belongsTo = array(
    'User' => array(
    'className' => 'User', 
    'foreignKey' => 'user_id', 
    'fields' => array('name','phone') 
    ) 
);