4

おはようございます、

私は現在、CodeigniterとDatamapper Library(http://datamapper.wanwizard.eu)を利用するプロジェクトに取り組んでいます。このプロジェクトでは、ユーザーデータ用の中央データベース(「ベース」と呼ばれる)と、アプリケーションデータ用の個別のデータベース(「crm」)を使用します。これは、将来、単一のサーバーに縛られることなく、ユーザーディレクトリを使用する他のアプリケーションを構築できるようにするためです。

組み込みのDatamapper関係を使用する必要があるが、2つのデータベース間で使用する必要があるという問題があります。これまでの私の設定は次のとおりです。

人物モデル

class person extends DataMapper {

    var $db_params = 'base';
    var $prefix = 'base_';

    var $has_many = array(
        'initiated_event' => array('class' => 'event','other_field' => 'initiator')
    )

}

イベントモデル

class event extends DataMapper {

    var $db_params = 'crm';
    var $prefix = 'crm_';

    var $has_one = array(
        'initiator' => array('class' => 'person','other_field' => 'initiated_event')
    )

}

問題

$ events-> initiator-> get()を使用しようとすると、次のエラーが発生します。

Error Number: 1146
Table 'circle_base.crm_events' doesn't exist
SELECT `base_persons`.* FROM (`base_persons`) LEFT OUTER JOIN `crm_events` initiated_event_crm_events ON `base_persons`.`id` = `initiated_event_crm_events`.`initiator_id` WHERE `initiated_event_crm_events`.`id` = 1
Filename: C:\xampp\htdocs\circle\crm\system\database\DB_driver.php
Line Number: 330

誰かがその問題に光を当てることができますか?DataMapperは実際にデータベース間の結合をサポートしていますか?そうでない場合、これを達成する方法はありますか?

4

1 に答える 1

1

データベース間でこれを行うことはできません。SQLから、1つのデータベースにクエリを実行しようとしていることがわかります(データベースの表記がないこともあります)。両方のデータベースが同じサーバーにあると思いますか?この場合、カスタムSQLクエリ(DBでは不明)を記述してみることができますが、クエリでdatabase.table関係を定義し、簡単なステートメントで試してください。

それ以外の場合は、オブジェクト/配列などを介してプログラムでこの難問を解決する必要があります。

参照: http:
//nathan.rambeck.org/blog/2-joining-mysql-tables-across-multiple-databases

于 2011-10-11T13:25:16.177 に答える