CakePHP での単一モデルの複数のデータベースへの接続
CakePHP では、複数のデータベースにわたるデータの管理は困難な作業となる場合があります。この質問では、各ユーザーが独自のデータベースを持っているシナリオについて詳しく説明します。課題は、データベース名をハードコーディングせずに正しいデータベースに動的に接続することにあります。
ユーザー固有のデータベースの分離
法的およびパフォーマンスの問題に対処するために、ユーザー データは個別のデータベースに分割されます。各データベースには、この質問に関連する「cars」テーブルを含む複数のテーブルが格納されています。
ユーザーとデータベースの関係
データベース名は次のように構成されています:
データベースとテーブルのマッピング
提供された図は、この設定におけるデータベースとテーブルの関係を明確に示しています。
動的データベース接続
問題の核心は、ログインするユーザーに基づいて、接続する正しいデータベースを特定することです。これらのデータベースとユーザーが動的に作成されることを考慮して、app/Config/database.php ファイルを変更します。
モデルと ConnectionManager の拡張
CakePHP のデフォルトのデータベース動作をバイパスするために、開発者は Model クラスと ConnectionManager クラスを拡張することを検討しました。ただし、より単純な解決策が見つかりました。
AppModel Extension
最終的な解決策には、AppModel.php ファイルを次のように変更することが含まれます:
class AppModel extends Model { public function setDatabase($database, $datasource = 'default') { ... (Database configuration logic) ... if ( $ds = ConnectionManager::create($nds, $db->config) ) { ... (Set Model configuration) ... return true; } return false; } }
この拡張機能は、モデルのデータベース接続を動的に設定する機能を提供します。
コントローラーの例
CarsController.php ファイルでは、setDatabase メソッドを次のように利用できます。以下:
class CarsController extends AppController { public function index() { $this->Car->setDatabase('cake_sandbox_client3'); ... } }
以上がCakePHP はどのようにして単一モデルの複数のユーザー固有のデータベースに動的に接続できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。