我正在CakePHP 2.2.3上开发一个Web应用程序,已经有了一个数据库(MySQL)。这个数据库是西班牙语的,所以我的应用程序是西班牙语的,我得到错误“错误:在数据源默认值中未找到模型订单的表订单。”
我的模型:
Orden.php
class Orden extends AppModel{
public $name = 'Orden';
public $useTable = 'ordenes';
public $primaryKey = 'idorden';
}
表格:
CREATE TABLE IF NOT EXISTS `ordenes` (
`idOrden` bigint(20) NOT NULL AUTO_INCREMENT,
-- more columns --
PRIMARY KEY (`idOrden`)
)
APP/config/database.php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'USER',
'password' => 'PASS',
'database' => 'DATABASE',
'prefix' => '',
//'encoding' => 'utf8',
);
}
根据文档,我可以用相应的表声明$useTable,但这不起作用。有人能帮助我吗?
编辑:$primaryKey
也有同样的问题,但变量$name
的值是正确的。
4条答案
按热度按时间zbsbpyhn1#
我找到了一个不完整的解决方案。检查以下代码:
如果我在
OrdenesController
中设置变量$useTable
,我可以得到Ordene数组,谁能告诉我为什么?wooyq4lh2#
您找到了问题的答案,其中包含一个对您有效的部分解决方案,但实际上这是一个在任何情况下都不起作用的变通办法。
我想回答这个问题:
“如果我在OrdenesController中设置变量
$useTable
,我就可以得到Ordenes的数组。谁能告诉我为什么?”你在自己的解决方案中问到的(还不能评论)。
首先要注意的一点是CakePHP抛出错误:
Error: Table <table name> for model <model name> was not found in datasource default.
个1.如果在默认数据源中未找到模型
<model name>
的表<table name>
。(显然)1.但在某些情况下,如果cakePHP找不到
<modelname>
模型,这可能会非常令人困惑。你所做的在你的模型中起作用的原因是因为当你在你的控制器中写:
CakePHP假定$this-〉order作为模型,并尝试在Model文件夹中找到模型order(注意CakePHP要查找的文件是order.phpNOTOrder.php它还希望类被称为order和NOTOrder,即使您可以更改模型的类名设置
$name
)。如果找到模型,它会尝试从模型的默认设置或设置集(如
$useTable
和$primaryKey
)中检索数据。如果找不到该表,则会显示错误消息,正确指示找不到该表。
但是如果没有找到模型cakePHP会尝试示例化模型,在本例中使用默认值,因为没有进行任何设置这意味着它使用 default 作为数据源,并且是 orden 的英语复数,ordens cakePHP尝试查找 ordens 表(这是cakePHP为模型命名表的标准方式,orden不是一个英语单词)。由于这个表不在 default 中它抛出错误,但真实的的错误是不存在的文件。
当您更改模型中的
$useTable
值时,您认为它将被使用而不是标准,但cakePHP没有使用您的模型 Orden,而是使用 “动态” 示例化的模型 orden,因为它无法找到错误消息所示的模型 orden(您的类是call Orden 而不是 orden)。这样,由任何默认模型支持的任何默认操作(例如 find 等)都将工作。
然后你调用
$this->orden->find('all')
,它将完美地工作,但如果你在你的模型中创建任何函数(你认为你正在使用 Orden 的那个)并调用它,你将得到一个错误,因为它们在 “on fly” 版本中不存在。因此,您的变通办法可以奏效,但只能部分奏效。
x33g5p2x3#
CakePHP可以使用多个数据源来处理多个连接(参见
APP/config/database.php
)不正确,但与您的问题无关,是
public $primaryKey = 'idorden';
。查看MySQL代码,它应该是:public $primaryKey = 'idOrden';
您是否已开启两柴模式?请尝试清除
/APP/tmp/cache
中的快取。也许您使用的是表前缀,而数据库中的表没有前缀?
您是否复制并粘贴了错误消息?型号不太可能用小型大写字母书写。
您还可以定义单词的自定义单数和复数形式,使使用
$useTable
变得无关紧要。请参阅http://book.cakephp.org/2.0/en/development/configuration.html#inflection-configuration但请查看您的数据库配置或显示代码,让我们看看您是否使用了多个数据源。否则,请使用mysql提示符或phpMyAdmin等工具检查该表是否真的存在。
kzipqqlq4#
我也遇到过这个问题。原因是我的模型php文件名为
ScheduleAd.php
,但我写"ScheduleAD"
是为了使用数组。所以,请检查一下你的模型文件名和模型类名是否和$uses数组中的名字一样,它们必须完全相等:)