【问题标题】:associate cakephp model to non-cakephp database table将 cakephp 模型关联到非 cakephp 数据库表
【发布时间】:2012-05-04 21:38:58
【问题描述】:

是否可以在 CakePHP 应用程序中创建一个模型并将该模型与一个根本不与 cakePHP 应用程序关联的数据库表关联?

例如,该数据库表属于另一个应用程序,我们想在 CakePHP 中创建一个使用该表的模型(因此该表根本不符合 CakePHP 的约定)。我该怎么做呢?我需要在我的模型中放入什么才能使该关联在不更改我的表的情况下工作(我需要能够对该表执行基本的 CRUD 操作)

有什么想法吗?

谢谢

【问题讨论】:

  • 向我们展示这张桌子的样子,我们或许能帮上忙……

标签: php cakephp cakephp-1.3


【解决方案1】:

是的,您可以这样做。例如,如果您有一个带有 idCandidat 主键的 cand 表,您可以创建一个模型并使用 $useTable 和 $primaryKey 属性:

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

然后您继续在控制器中使用您的模型,就像使用普通模型一样。

【讨论】:

    【解决方案2】:

    您甚至可以使用位于完全不同的数据库或不同服务器上的表。为此,您可以使用(我将扩展 @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',
        );
    

    当然,您可以随意命名您的数据源。

    【讨论】:

    • 如果我想更改模型字段的名称怎么办(例如,假设数据库中有一个名为 phone 的字段,但我希望模型将该字段称为telephone)。我该怎么做呢?如果我不想将表中的所有列用于我的模型(假设我只想将表中的几列与我的模型相关联)怎么办。我该怎么做?
    • 只需将 Model::find() 调用更改为包括:'fields' => array('field1', 'field2', 'field3')。这样, find() 函数的返回将仅包含列出的字段。我个人不知道有任何其他方法可以在模型本身中改变它。看看这个:book.cakephp.org/1.3/en/view/1017/Retrieving-Your-Data
    【解决方案3】:

    您可以在查找功能中设置字段(列) - http://book.cakephp.org/1.3/en/view/1018/find 或者如果你想将字段设置为关联,你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多