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 に答える