在CAKEPHP中,我们可以动态更改链接到特定模型的表吗?

Lib*_*ibu 6 php cakephp model dynamic-data

假设我有2个相同的表具有相同的结构(称之为'tableA'和'tableB').

我想保存表'A'上的某些数据和表'B'上的某些数据.

现在我想对表格使用相同的MODEL.

我想更改与模型链接的表(比如'ModelM'),根据控制器的条件动态更改.

例如


在控制器中: - //示例代码

function saveProduct(){

    $this->loadModel('ModelM');

    if(condition){

        $this->ModelM->useTable = 'A';

    }else{

        $this->ModelM->useTable = 'B';

     }
     $this->ModelM->save($this->data);

}
Run Code Online (Sandbox Code Playgroud)

2011年1月14日的补充

以下是我正在处理的代码的复制/粘贴:

function experiment(){

    $tableName = 'temp_table'.'1234';

    mysql_query('CREATE TABLE '.$tableName.' LIKE temp_home_masters');

    $sql = $this->createInsertQuery($new_arr,$tableName);

    $status = mysql_query($sql);

    if($status){
        echo "saved successfully";
    }else{
        echo "error";
    }

    $this->NewHomeMaster->setSource($tableName);//NewHomeMaster was previously attached to a different table , here I want to change the tableName the model linked with dynamically.Model 'NewHomeMaster' already exists and uses a table ...Here I am willing to link this model to the newly created tempory table.//

    $home_details=$this->paginate('NewHomeMaster',array($new_conditions));

    mysql_query('DROP table '.$tableName);

}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用......

Ste*_*hen 3

我本来是想解决你的问题,但越想越觉得你的逻辑有问题。

我可以看到这些表相似或相同的事实如何导致您决定使用单个模型与两个表进行交互。然而,当您查看模型应该是什么时(在 CakePHP 中基本上是表的接口),来回切换是没有意义的。

CakePHP 文档解释了这样的模型:

在面向对象编程中,数据模型是代表“事物”的对象,例如汽车、人或房屋。

在您的示例中,您确实有两个看起来完全相同的独立“事物”。因此,他们应该有自己的模式。

如果您的模型确实具有完全相同的方法,那么“CakePHP 方式”将定义一个封装您的共享方法的自定义行为。然后将行为附加到两个模型。

然后就可以在Controller条件下加载你需要的模型了:

private $DynamicModel;

public function saveProduct() {
    if (condition) {
        App::import('Model', 'ModelZ');
        $this->DynamicModel = new ModelZ;
    } else {
        App::import('Model', 'ModelY');
        $this->DynamicModel = new ModelY;
    }
    $this->DynamicModel->save($this->data);
}
Run Code Online (Sandbox Code Playgroud)