【问题标题】:PHP activerecord exception : Base table or view not foundPHP activerecord 异常:未找到基表或视图
【发布时间】:2013-06-10 10:43:11
【问题描述】:

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

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

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

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

有消息

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

这是我完整使用的代码。

<?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 日),我几乎无法理解这一点。请告知如何纠正此问题。

【问题讨论】:

  • 如果您solved your own question,请将解决方案放在答案中,而不是在您原来的问题中。
  • 显然我没有足够的代表来回答我自己的问题......
  • 我已经为你回答了这个问题。当您获得足够的声望时,如果您愿意,可以将我的答案复制并粘贴到您自己的答案中。
  • 好吧。谢谢蒂姆。

标签: php exception phpactiverecord


【解决方案1】:

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

在与 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');
        }
}

【讨论】:

    【解决方案2】:

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

    我的错误是完全相同的。

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

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

    问题是:

    --使用大写字母(例如 statePages)创建的数据库表...创建时,它被重命名为不带驼峰字母的 statepages。

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

    希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 2023-03-08
      • 1970-01-01
      • 2019-01-28
      • 2018-01-25
      • 2018-03-11
      • 2016-09-23
      相关资源
      最近更新 更多