Cakephp动态模型/ realation表

时间:2012-07-14 09:15:58

标签: mysql database cakephp model

我正试图在我的APP中实现这个结构(我将使用幻想模型名称):

User hasMany Box
Box  hasMany Item
Item hasOne  Itemdata

"Item" have some metadata/info
"Itemdata" has 2 or 3 mediumblobs

如果我想要一个包含4个表的数据库,那将非常容易:用户,盒子,项目,项目数据。

在我的数据库结构中,由于数据量的原因,我想在依赖于用户的表中拆分Itemdata,如下所示:

a) user1_itemdatas, user2_itemdatas ...

或至少,

b) myapp_user1.itemdatas, myapp_user2.itemdatas 
(where myapp_user* are different DB).

当查找/读取属于某些用户的数据时,如何在模型“Itemdatas”中动态更改表格?

我应该选择自定义查询吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了办法:

我在app / Config / database.php中创建了另一个数据库,我添加了一个新连接:

public $itemsdb = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'myuser',
    'password' => 'mypass',
    'database' => 'myapp_items',
    'prefix' => ''
);

然后在Itemdata模型中我把:

class Itemdata extends AppModel {
  public $useDbConfig = 'itemsdb';
  ..
}

最后执行搜索时:

$user_id = $this->getUserByItemId($item_id);
$this->Itemdatas->useTable = 'itemdatas_user_'.$user_id;
$itemdata = $this->Itemdata->find('first',....);

另一种方法是使用依赖于用户的表前缀,而不是表名。