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'))。ただし、2 番目のパラメーターは配列にする必要があります。したがって、次のように記述する必要があります。

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 に答える