是否可以在 CakePHP 应用程序中创建模型并将该模型与根本不与 cakePHP 应用程序关联的数据库表相关联?
例如,该数据库表属于另一个应用程序,我们想在 CakePHP 中创建一个使用该表的模型(因此该表根本不符合 CakePHP 的约定)。我该怎么做呢?我需要在我的模型中放入什么才能使该关联在不更改我的表的情况下工作(我需要能够在该表上执行基本的 CRUD 操作)
请问有什么想法吗?
谢谢你
是否可以在 CakePHP 应用程序中创建模型并将该模型与根本不与 cakePHP 应用程序关联的数据库表相关联?
例如,该数据库表属于另一个应用程序,我们想在 CakePHP 中创建一个使用该表的模型(因此该表根本不符合 CakePHP 的约定)。我该怎么做呢?我需要在我的模型中放入什么才能使该关联在不更改我的表的情况下工作(我需要能够在该表上执行基本的 CRUD 操作)
请问有什么想法吗?
谢谢你
是的,你可以这么做。例如,如果您有一个带有 idCandidat 主键的 cand 表,您可以创建一个模型并使用 $useTable 和 $primaryKey 属性:
class Candidat extends AppModel{
var $name = 'Candidats';
var $useTable = 'cand';
var $primaryKey = 'idCandidat';
//etc.
}
然后您继续在控制器中使用您的模型,就像您使用普通模型一样。
您可以在查找功能中设置字段(列) - http://book.cakephp.org/1.3/en/view/1018/find 或者如果您想将字段设置为关联,您可以这样做:
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'fields' => array('name','phone')
)
);
您甚至可以使用位于完全不同的数据库或不同服务器上的表。为此,您可以使用(我将扩展 @chroonoss 的示例,因为它是正确的):
class Candidat extends AppModel{
var $name = 'Candidats';
var $useTable = 'cand';
var $primaryKey = 'idCandidat';
var $usedbConfig = 'external';
}
这将允许您使用不同的 DataSource 连接。这些定义在:
app/config/database.php
. 你必须有一个名为“external”的属性,这个例子才能工作:
public $external = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => '101.180.10.17',
'login' => 'username',
'password' => 'yourTopSecretPassword',
'database' => 'database_name',
'prefix' => '',
'encoding' => 'utf8',
);
当然,您可以随意命名您的 DataSource。