2012-07-14 57 views
0

我想實現這個結構,我的應用程序(我會用幻想的型號名稱):CakePHP的動態模型/ realation表

User hasMany Box 
Box hasMany Item 
Item hasOne Itemdata 

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

這將是很容易的,如果我想用4桌分貝:用戶,箱子,物品,itemdata。

在我的數據庫結構,由於數據量,我想在與用戶相關的表分裂的ItemData,像這樣:

a) user1_itemdatas, user2_itemdatas ... 

,或者至少,

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

如何在查找/讀取屬於某些用戶的數據時,可以在模型「Itemdatas」中隨時更改表格嗎?

我應該選擇自定義查詢嗎?

回答

0

好,我找到了一個方法:

我創造了另一個數據庫,在app /配置/ database.php中我添加了一個新的連接:在的ItemData模型

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

然後我把:

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

另一種方法是使用依賴用戶的表前綴,而不是表名。