我正试图在我的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”中动态更改表格?
我应该选择自定义查询吗?
答案 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',....);
另一种方法是使用依赖于用户的表前缀,而不是表名。