Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp$useTable不起作用_Cakephp_Models_Cakephp Model_Cakephp 2.2 - Fatal编程技术网

Cakephp$useTable不起作用

Cakephp$useTable不起作用,cakephp,models,cakephp-model,cakephp-2.2,Cakephp,Models,Cakephp Model,Cakephp 2.2,我正在CakePHP2.2.3上开发一个web应用程序,其中已有一个数据库(MySQL)。这个数据库是西班牙语的,所以我的应用程序是西班牙语的,我得到一个错误“error:Table ordens for model orden在datasource default中找不到。” 我的模型: Orden.php class Orden extends AppModel{ public $name = 'Orden'; public $useTable = 'ordenes';

我正在CakePHP2.2.3上开发一个web应用程序,其中已有一个数据库(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/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
的值正确。

您确定默认数据源中存在表吗?CakePHP可以使用多个数据源来处理多个连接(请参见
APP/config/database.php

不正确,但与您的问题无关的是
public$primaryKey='idorden'。看看你的MySQL代码,它应该说:
public$primaryKey='idOrden'

你有调试模式吗?尝试在
/APP/tmp/cache
中刷新缓存

可能您正在使用表前缀,而数据库中的表没有前缀

您是否复制并粘贴了错误消息?模型不太可能用大写字母书写

您还可以使用
$useTable
定义单词的自定义单数和复数形式。看


但是,请查看您的数据库配置,或者向我们展示代码,让我们看看您是否正在使用多个数据源。否则,请使用mysql提示符或phpMyAdmin之类的工具检查该表是否确实存在。

我找到了一个半途而废的解决方案。 检查以下代码:

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数组。有人能告诉我为什么吗?

我也遇到了这个问题。原因是我的php模型文件名
ScheduleAd.php
,但我编写了
“ScheduleAd”
用于数组

public $uses = array('ScheduleAD');

因此,请检查您的模型文件名、模型类名和$uses array中的名称是否完全相等:)

您找到了问题的答案,其中有一个对您有效的部分解决方案,但实际上这是一个在任何情况下都不会起作用的变通方法

我想回答这个问题:

“如果我在OrdenesController中设置变量
$useTable
,我可以得到Ordenes数组。有人能告诉我为什么吗?”

您在自己的解决方案中提出的问题(目前无法评论)

第一个重要注意事项是CakePHP抛出错误:

错误:在数据源默认值中找不到模型的表。

  • 如果在中找不到型号
    的表
    数据源默认值。(明显)
  • 但在某些情况下,如果cakePHP找不到模型
    ,这可能会让人非常困惑
  • 您在模型中所做的工作之所以有效,是因为您在控制器中编写:

    public $uses = array('orden');
    
    CakePHP假定$this->order为模型,并尝试在文件夹模型中查找模型order(请注意,CakePHP将查找的文件是order.phpNOTorder.php它还希望类被调用order和NOTorder,即使您可以更改模型的类名设置
    $name

    如果找到模型,它将尝试从模型的默认设置或设置中检索数据(如您的案例中的
    $useTable
    $primaryKey
    )。
    如果找不到表,则会显示错误消息,正确指示找不到表的事实

    但如果没有找到模型,cakePHP会尝试实例化模型,在本例中是使用默认值,因为没有进行任何设置(模型被“动态”实例化)。这意味着它使用默认值作为数据源,并且是orden的英文复数,ordens cakePHP会尝试查找ordens表(这是cakePHP为模型命名表的标准方法,orden不是英语单词)。 由于该表不在默认数据源中,因此会抛出错误,但真正的错误是不存在的文件

    当您更改模型中的
    $useTable
    值时,您认为将使用该值而不是标准值,但cakePHP使用的不是您的模型Orden,而是“动态”实例化的模型Orden,因为它找不到错误消息sais中的模型Orden(您的类称为call Orden NOT Orden)

    因此,由任何默认模型(例如find等)排序的任何默认操作都将起作用。
    然后你调用
    $this->orden->find('all')
    它会很好地工作,但是如果你在你的模型中创建任何函数(你认为你正在使用orden的函数)并调用它,你会得到一个错误,因为它们在“动态”版本中不存在


    由于这个原因,您的解决方法将起作用,但只起到很小的作用。

    我在第一篇文章中添加了my database.php,而且正如您所说,我已删除了
    /APP/tmp/cache
    中的文件,但错误保留了。消息“错误:在datasource default中找不到模型orden的表ordens。”是复制并粘贴在这里的。我也读过单数和复数形式,但我不明白。最后,我确信该表存在。正如前面所说,您使用的是两种不同的模型。请更正
    public$uses=array('orden');
    to
    public$uses=array('orden');
    (注意大写字母O)在控制器上省去
    $this->orden->useTable='ordenes';
    (都在控制器中),您使用的是不同的模型(“orden”,小写字母为“o”)。该模型是动态创建的。这就是为什么。将调试设置为2,并检查页面底部的SQL日志以获取线索。这不会提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您有足够的内容,您将可以