1

我正在尝试活动记录。我相信这是一个很棒的 ORM,但是我无法让它运行。

有些方法有效,但其他方法无效 例如

<?php
$user=new user();
foreach(user::find('all') AS $row) {
  echo "$row->username <br>"; //this works fine. 
}

但是,当提供选项或使用 validates_uniqueness_of 时,会引发异常:

foreach (user::find('all','order'=>"created DESC ,'limit'=>10")) {
  echo "$row->username <br>";

这导致

Fatal error: Uncaught exception 'ActiveRecord\RecordNotFound' 

...带有消息...

Couldn't find all user with IDs (all,created DESC ,'limit'=>10) (found 0, but was looking for 2)

我正在使用 php 5.3.4 并使用夜间构建(2013 年 5 月 8 日)请告知如何解决此问题。

/*------------------------edit : full code----------------*/

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

$user = new user(); //class user extends ActiveRecord\Model {}

foreach (user::find(array('all','conditions'=>"username LIKE '%ohn%'")) AS $row) {
    echo "Username:$row->username<br>";
}
4

1 回答 1

0

问题是您以错误的方式调用方法。

第一个参数表示一种搜索类型,应该是一个字符串(但您实际上可以使用快捷方法:例如,User::all()而不是User::find('all')),但第二个参数应该是一个数组。所以应该这样写:

user::find('all', array('order' => 'created DESC', 'limit' => 10));

... 要不就 ...

user::all(array('order' => 'created DESC', 'limit' => 10));

我的猜测(因为您仍然没有提供整个代码)是您实际上将所有参数包装find到一个数组中。并且此方法已调整,因此在这种情况下,它会尝试将此数组的值用作要在表查找中使用的 ID。

这些 ID 的数量是 2,因此它预计会找到 2 个项目 - 但显然找不到任何项目;因此是一个例外。Ruby-On-Rails 实现使用了相同的方法;检查这个讨论是否有类似的错误(和原因)。

查看文档以获取有关如何使用 PHPActiveRecord 的查找器方法的更多详细信息。

于 2013-06-09T21:02:17.353 回答