更新:請看到我的編輯部分的下方,我解釋一下測試CakePHP的模型忽略DATABSE設置
我的工作在網站上使用CakePHP 2.5.1後,我發現,和我遇到一個很奇怪的行爲:2款我似乎拒絕使用不同的數據庫配置(而不是默認的),如果我不把它放在蛋糕的默認型號文件夾(如果我把它放在一個那裏一切都很好)。
兩款機型都位於同一個文件夾中,這恰好是不是默認的模型文件夾(這是因爲這些都與其他網站共享的,我有,我把所有的那些共享一個集中的地方)。
做蛋糕找到那些我用下面的代碼行中bootstrap.php中文件型號:App::build(array('Model' => array(dirname(ROOT) . DS . '_shared/Cake_v2/Model')));
的2個型號我有人稱Campanya和EjercicioMultChoice。
一切似乎是正確設置:
- 如果我打印
App::objects('Model')
我可以看到上市有兩種型號,這意味着蛋糕被發現他們在外部文件夾 - 如果我打印
get_class_vars('DATABASE_CONFIG')
我可以看到這兩個數據庫配置:默認一個,通過Campanya,並且定製用於一個(稱爲BD_Contenidos),使用Ejercic ioMultChoice。 - 這兩種型號都包含在AppController.php與
$uses
變量數組中。
我可以撥打Campanya模型在控制器中沒有任何問題。然而,調用EjercicioMultChoice模型時,我得到以下錯誤:
MISSING DATABASE TABLE
Error: Table ejercicio_mult_choices for model EjercicioMultChoice was not found in datasource default.
這是EjercicioMultChoice模型文件的樣子:
class EjercicioMultChoice extends AppModel {
public $name = 'EjercicioMultChoice';
public $primaryKey = 'id';
public $useTable = 'ejercicios_multiple_choice';
public $useDbConfig = 'BD_Contenidos';
}
正如你可以看到,該模型表明以使用Cake知道的特定數據庫配置,但是在上面顯示的錯誤中,它表示它無法在數據源中找到表格,默認爲。它不能,因爲它不在那裏,它在另一個數據庫中的另一個表中(順便說一下,這個其他數據庫與默認的數據庫在同一臺服務器上,我在其他項目中使用它沒有問題)。
正如我上面提到的,如果我移動完全相同的EjercicioMultChoice。php模型文件到Cake的默認app/Model/文件夾,那麼我沒有任何問題。
所以我在這裏有點迷路,我不知道我還能找到什麼來找到問題所在。任何幫助將非常感激!!
編輯
所以我相信我已經發現這個問題是什麼,以及一個關於它的解決辦法,但我還是想知道爲什麼發生這種情況,我怎麼能使其工作,因爲它應該。
如果我調用模型前添加這些2行代碼(兩者的),那麼這一切工作正常:
$this->EjercicioMultChoice->setDataSource('BD_Contenidos');
$this->EjercicioMultChoice->setSource('ejercicios_multiple_choice');
這顯然意味着,即使蛋糕找到EjercicioMultChoice.php模型文件(其指示數據庫和表名稱)忽略那些2個變量($ useTable和$ useDbConfig)。讓它工作的唯一方法是用上面寫的方法手動設置這兩個變量。
這是怎麼發生的?如果模型文件在默認文件夾,這不會發生......
感謝您的幫助,這是類似的東西(請參閱我的答案,我解釋發生了什麼) – Albert 2014-10-07 15:32:51