2013-06-09 1 views
1

Я пробовал активную запись. Я считаю, что это отличный ORM, но у меня возникают проблемы с его запуском.PHP: Неустранимая ошибка: исключение «ActiveRecord RecordNotFound»

Некоторые методы работы, но другие этого не делают Например

<?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 и использовать ночные сборки (8 мая 2013) Просим уведомить о том, как это исправить.

/*------------------------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:[email protected]/test_ar', 
        'test' => 'mysql://username:[email protected]/test_database_name', 
        'production' => 'mysql://username:[email protected]/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>"; 
} 

ответ

0

Проблема в том, что вы неправильно вызываете методы.

Первый параметр означает тип поиска и должен быть строкой (но на самом деле вы можете использовать методы быстрого доступа: User::all() вместо User::find('all')), но вторым параметром должен быть массив. Так оно и должно быть написано так:

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

... или просто ...

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

Моя догадка (как вы до сих пор не предоставили весь код) является то, что вы на самом деле wrap все параметры find в один массив. И этот метод настроен таким образом, что в таких случаях он пытается использовать значения этого массива в качестве идентификаторов, которые будут использоваться в поиске таблицы.

Число этих идентификаторов равно 2, поэтому ожидается найти 2 объекта - но, очевидно, их не найти; следовательно, Исключение. Такой же подход используется при реализации Ruby-On-Rails; проверьте this discussion за аналогичную ошибку (и причину).

Проверьте документацию для получения более подробной информации о том, как следует использовать finder methods из PHPActiveRecord.

+0

Большое спасибо @ raina77ow Это действительно проблема. :) – Isao

 Смежные вопросы

  • Нет связанных вопросов^_^