我正在CakePHP2.2上开发一个web应用程序。3已存在数据库(MySQL)。这个数据库是西班牙语的,所以我的应用程序是西班牙语的,我得到一个错误“error:Table ordens for model orden在datasource default中找不到。”
我的模型:
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/配置/database.php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'USER',
'password' => 'PASS',
'database' => 'DATABASE',
'prefix' => '',
//'encoding' => 'utf8',
);
}
根据docs,我可以用相应的表声明$useTable,但这不起作用。有人能帮帮我吗?
编辑:与$primaryKey
相同的问题,但变量$name
的值正确。
我找到了一个半途而废的解决办法。检查以下代码:
class OrdenesController extends AppController{
public $name = 'Orden';
public $uses = array('orden');
public $helpers = array('Html', 'Form');
public function index(){
$this->orden->useTable = 'ordenes';
$this->set('ord', $this->orden->find('all'));
}
}
如果我在OrdenesController
中设置变量$useTable
,我可以得到Ordenes数组。谁能告诉我为什么?
你找到了你的问题的答案,有一个对你有效的部分解决方案,但事实上这是一个在任何情况下都不会起作用的变通方法。
我想回答这个问题:
“如果我在OrdenesController中设置变量$useTable
,我可以得到Ordenes数组。有人能告诉我为什么吗?”
您在自己的解决方案中询问的问题(目前无法评论)。
第一个重要注意事项是CakePHP抛出错误:
错误:表
您在模型中所做的工作之所以有效,是因为您在控制器中编写:
public $uses = array('orden');
CakePHP假设$this-
如果找到模型,它将尝试从模型的默认设置或设置(如您的案例中的$useTable
和$primaryKey
)检索数据
如果找不到表,则会显示错误消息,正确指示找不到表的事实。
但如果没有找到模型,cakePHP会尝试实例化模型,在本例中是使用默认值,因为没有进行任何设置(模型是“动态”实例化的)。这意味着它使用默认值作为数据源,作为orden的英文复数,ordens cakePHP尝试查找ordens表(这是cakePHP为模型命名表的标准方法,orden不是英文单词)。由于该表不在默认数据源中,因此会抛出错误,但真正的错误是不存在的文件。
当你改变$useTable
值在你的模型中,你认为它将被使用,而不是标准,但cakePHP不是使用你的模型奥登,而是“在飞”实例化模型奥登,因为它找不到模型奥登作为错误消息说(你的类是调用奥登不是奥登)。
因此,由任何默认模型(例如find等)排序的任何默认操作都将起作用
然后调用$this-
由于这个原因,您的变通方法将起作用,但仅在很大程度上起作用。
您确定默认数据源中存在表吗?CakePHP可以使用多个数据源来处理多个连接(请参见APP/config/database.php
)
不正确的,但与您的问题无关,是Public$priyKey='idorden';
。看看你的MySQL代码,它应该说:Public$priyKey='idOrden';
你有调试模式吗?尝试在/APP/tmp/cache
中刷新缓存。
也许您使用表前缀,而数据库中的表没有前缀?
您是否复制并粘贴了错误消息?模型不太可能用大写字母书写。
您还可以使用$useTable
定义单词的自定义单数和复数形式。看见http://book.cakephp.org/2.0/en/development/configuration.html#inflection-配置
但是,请查看您的数据库配置,或者向我们展示代码,让我们看看您是否正在使用多个数据源。否则,请使用mysql提示符或phpMyAdmin等工具检查表是否确实存在。