PHP/Idiorm + Paris を用いて同一プロジェクト内で複数DBに接続 (and Using Namespace)
Idiorm + Paris を使って、同一プロジェクト内で複数のDBに接続し、なおかつ名前空間によって各機能をパッケージング。
ちょっと詰まったのでメモ。
<?php namespace MyNamespace; require_once '/path/to/BaseWrapperModel.class.php'; # データベース設定 \ORM::configure('mysql:host='.DB_HOST.';dbname='.DB_NAME, null, 'connection_name'); \ORM::configure('username', DB_USER, 'connection_name'); \ORM::configure('password', DB_PASSWORD, 'connection_name'); \ORM::configure('driver_options', [ \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', ], 'connection_name'); \Model::$short_table_names = true; class Base extends \BaseWrapperModel { }
以下のメソッドの引数がキモらしく、
\ORM::configure('mysql:host='.DB_HOST.';dbname='.DB_NAME, null, 'connection_name');
connection_name に任意の接続名を指定してあげて、なおかつ第3引数がないとダメだったようです。
また、has_many を指定する際も同様に第3引数に何かしら渡してあげる必要がありました。
$this->has_many('MyNamespace\Hoge', 'fuga_id', null, 'connection_name');
PHP の Namespace の仕様も勉強できたし、詰まったけどタメにはなりましたとさ。