LoginSignup
1

More than 5 years have passed since last update.

CakePHP: The datasource configuration default was not found in database.php

Last updated at Posted at 2016-02-09

表題の不具合でハマったので、共有です。

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.phppublic $useDbConfig = 'default';
が有効になります。

結果として表題のエラーメッセージが出るという仕組みです。

書いていて「自分ってアホだな」と思ったのですが、デバッグには相当時間がかかっため、
検索等でここに辿り着いた方のヘルプになれば幸いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1