CakePHP要求模型表尽管useTable = false

时间:2009-09-26 19:13:23

标签: cakephp

我正在创建一个联系表单,以便将电子邮件发送到指定的地址。我正在尝试使用CakePHP模型验证,因为我不需要联系模型的表,我在联系模型中将useTable设置为false。 然而,我在执行发送的控制器功能中出错。错误是

  

缺少数据库表   错误:找不到模型联系人的数据库表联系人。

指向第一次调用$ this->联系人:

  

$ this->联系人 - >验证($ this->数据);

我认为使用CakePHP框架一切都很好。为什么我错了?

6 个答案:

答案 0 :(得分:7)

修改:请参阅this answer(和comment)了解CakePHP 2.x(模型文件应称为Contact.php


CakePHP 1.x - 验证您的模型文件是否为contact.php(小写)。如果不是,CakePHP将找不到您的模型,而是在运行时创建一个名为Contact的“autoModel”,它使用contacts表。

答案 1 :(得分:4)

这是搜索的最佳结果,但我认为信息已过时。

在CakePHP 2.0+中,您需要在模型中设置$useTable = false;,模型名称使用的是正确的(因此它应该是Contact而不是contact,并且控制器必须具有$uses = 'Contact';$uses = array('Contact');或cake生成默认模型属性,并尝试加载不存在的表。因此,必须设置这两件事才能使其发挥作用。

答案 2 :(得分:2)

如果内存服务,你实际上并没有设置你的模型:

$this->Contact->set( $this->data );
$this->Contact->validates();

在您的代码中,当您尝试验证模型时,实际上并未填充模型。

答案 3 :(得分:2)

如果您使用的是没有桌子的模型,您还需要设置一个模式,例如

class Contact extends AppModel {
    var $name = 'Contact';
    var $useTable = false;
    var $_schema = array(
        'name' => array('type' => 'string', 'length' => 255),
        'email' => array('type' => 'string', 'length' => 255),
        'message' => array('type' => 'text')
    );
}

答案 4 :(得分:2)

两件事对我来说有所不同 - 将我的模型的文件名更改为Contact.php(而不是ContactModel.php)并在我的ContactController.php中注释掉var $uses = 'Contact';

此外,许多联系表单的教程都是针对早期版本的CakePHP。请务必使用正确的表单输入结构。以下是Cake 2.1中我的观点:

<?php 
    echo $this->Form->create('Contact');
    echo $this->Form->inputs();
    echo $this->Form->end('Send');

?>

答案 5 :(得分:1)

如果它对任何人有帮助,我发现如果我有

var $uses = 'ModelName';

在我的控制器中,它将覆盖useTable。如果您不需要,请将其取下。