问题
I am trying out php active record, it's a great ORM, however I am at a standstill.
I have looked around google, blogs, phpactiverecord documentation as well as statckoverflow for days but have not been able to come across a suitable solution to this problem.
I am able to carry out the basic CRUD (insert,fetch, modify and delete) operations however as soon as i validate an object property using a static $validates_uniqueness_of filter, i get
Fatal error: Uncaught exception 'ActiveRecord\DatabaseException'
With message
exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test_ar.models' doesn't exist' in C:\wamp\www\test_AR\AR\lib\Connection.php on line 325
Here is the code i used in full.
<?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
References i have tried/looked at
https://github.com/kla/php-activerecord/issues/274 (though i don't really understand what's going on there)
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
as well as many others.
Platform and php version
I am using php 5.3.4 and using nightly build (May 8 2013) I have almost failed to get my head around this. Please advise on how to correct this.
回答1:
This has been solved by the question author:
After discussing it with a few developers on github. It seems this is a bug.
The work around was to create a custom validator in the model
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:
I had this error crop up today in a custom application, not Drupal.
my error was the exact same one.
however the issue was that I created the application on a windows server, then moved it to a linux based server.
apparently during creation the windows based application ran just fine, but threw the error mentioned after move to Linux.
THE ISSUE WAS:
--a database table that was created with a capital litter such as statePages... when it was created it was renamed to statepages without the camel case letter.
once I went into the application and where the app connected and drew information from the database, I removed the mismatch capital letter, and the application found the database table just fine and work like expected.
hope this helps someone else.
来源:https://stackoverflow.com/questions/17022001/php-activerecord-exception-base-table-or-view-not-found