表題の不具合でハマったので、共有です。
Cakephpでは、モデルにおいては$useDbConfig
を通じて接続先のデータベースを切り替えることができます。私はdatabase.php
を作成する際、$default
を削除して新たに接続先を定義していました:
database.php
class DATABASE_CONFIG {
public $database1 = array(
'datasource' => 'Database/PostgresLog',
'persistent' => false,
'host' => 'localhost',
'port' => '5432',
'login' => 'postgres',
'password' => '',
'database' => 'database1',
'prefix' => '',
'encoding' => 'utf8',
);
public $database2 = array(
'datasource' => 'Database/PostgresLog',
'persistent' => false,
'host' => 'localhost',
'port' => '5432',
'login' => 'postgres',
'password' => '',
'database' => 'database2',
'prefix' => '',
'encoding' => 'utf8',
);
またモデルでは次のようにしていました:
MyModel.php
<?php
App::uses('AppModel', 'Model');
/**
* Model
*
*/
class MyModel extends AppModel {
/**
* Use database config
*
* @var string
*/
public $useDbConfig = 'database1';
}
そして、モデルをコントローラから次のように読み込んでいたのです:
myController.php
public $uses = array('MyModels');
これを実行するとどうなるか?とても不可解なことに
The datasource configuration default was not found in database.php
と出力されます。原因は、モデルの指定が間違っているためです:
public $uses = array('MyModel'); // モデル名は単数形で指定
// public $uses = array('MyModels'); // 複数形は間違い
複数形で指定すると「モデルが見つからない!」というエラーは出ません。
その代わりにAppModel.php
のインスタンスが作られます。
AppModel.php
は(デフォルトでは)$useDbConfig
が指定されてないので、
lib/Cake/Model/Model.php
のpublic $useDbConfig = 'default';
が有効になります。
結果として表題のエラーメッセージが出るという仕組みです。
書いていて「自分ってアホだな」と思ったのですが、デバッグには相当時間がかかっため、
検索等でここに辿り着いた方のヘルプになれば幸いです。