PHP activerecord异常:找不到基表或视图

时间:2013-06-10 10:43:12

标签: php exception phpactiverecord

我正在尝试php活动记录,这是一个很好的ORM,但我处于停滞状态。

我已经浏览了谷歌,博客,phpactiverecord文档以及statckoverflow几天但未能找到合适的解决方案来解决这个问题。

我能够执行基本的CRUD(插入,获取,修改和删除)操作,但是只要我使用静态$ validates_uniqueness_of过滤器验证对象属性,我就得到了

  

致命错误:未捕获的异常'ActiveRecord \ DatabaseException'

留言

  

异常'PDOException',消息'SQLSTATE [42S02]:基表或   查看未找到:1146表'test_ar.models'不存在'   第325行的C:\ wamp \ www \ test_AR \ AR \ lib \ Connection.php

这是我完整使用的代码。

<?php
$path_to_AR = "AR/"; 
include $path_to_AR . "activerecord.php"; 
ActiveRecord\Config::initialize(function($cfg) {
        $cfg->set_model_directory('model');
        $cfg->set_connections(
                        array(
                         'development' => 'mysql://root:asdf@localhost/test_ar',
                         'test' => 'mysql://username:password@localhost/test_database_name',
                         'production' => 'mysql://username:password@localhost/production_database_name'
                        )
                );
        });   

/*
class user extends ActiveRecord\Model 
{ 

  static $validates_presence_of = array(array('username', 'message' => 'Please supply a username')); //this works just fine
  static $validates_uniqueness_of = array(array('username'));//this line causes the PDO exception   

}
*/
$user = new user(); 

user::create((array('username'=>'mike','password'=>'test','created'=>time())));
$user::create(array('username'=>'mike')); //cannot even reach this line because of the exeption

参考资料我已尝试/查看

https://github.com/kla/php-activerecord/issues/274(虽然我真的不明白那里发生了什么)

http://www.phpactiverecord.org/projects/main/wiki/Validations#validates_uniqueness_of

http:// blog.felho.hu/what-is-new-in-php-53-part-2-late-static-binding.html

以及许多其他人。

平台和php版

我正在使用php 5.3.4并使用每晚构建(2013年5月8日)我几乎没有理解这个问题。请告知如何纠正此问题。

2 个答案:

答案 0 :(得分:0)

问题作者已经解决了这个问题:

  

与github上的一些开发人员讨论后。这似乎是一个错误。

     

解决方法是在模型中创建自定义验证器

public function validate() {
        if ($this->is_new_record() && static::exists(array('conditions' => array('username' => $this->username)))) {
            $this->errors->add('username', 'This username is already taken');
        }
}

答案 1 :(得分:0)

我今天在自定义应用程序中出现了这个错误,而不是Drupal。

我的错误完全相同。

然而问题是我在Windows服务器上创建了应用程序,然后将其移动到基于Linux的服务器。

显然在创建过程中,基于Windows的应用程序运行得很好,但在转移到Linux之后抛出了提到的错误。

问题是:

- 使用诸如statePages之类的大写垃圾创建的数据库表...在创建它时,它被重命名为没有驼峰大小写字母的statepages。

一旦我进入应用程序并且应用程序连接并从数据库中提取信息,我删除了不匹配的大写字母,并且应用程序发现数据库表很好并且按预期工作。

希望这有助于其他人。