0

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

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”中的表?

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

4

1 回答 1

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',....);

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

于 2012-07-14T10:09:59.543 回答