0

私は Kohana 3.2 を使用していますが、それほど重要ではありませんが、返されたすべてのデータベース レコードを特定のクラスにラップするアプリケーションを作成しています。データベース行をクラスにロードする最良の方法を理解しているかどうかはわかりません。ORM モデルの場合もあれば、単なる行 ID の場合もあるためです。

したがって、コントローラーからすべてのユーザーのリストが必要な場合は、次のようになります。

コントローラ:

$users = User::find_all();

ユーザークラス

public static function find_all()
{
    $users_model = ORM::factory('user')->find_all();
    $users = array();
    foreach ($users_model as $user_model)
    {
        $users[] = User::instance($user_model);
    }
    return $users;
}

それはうまく機能しますが、いくつかのアクションの後など、IDだけでユーザーオブジェクトをロードする必要がある場合があります。例を次に示します。

コントローラ

$user_id = $_POST['user_id'];
$user = User::instance($user_id);

ID または ORM オブジェクトが渡されたかどうかを識別しようとする責任を負う User クラスも同様です。それは適切な OOP プラクティスには適していないように思えますが、それを行う最善の方法が何であるかは本当にわかりません。私が現在行っていることは、コンストラクトにあります:

public function __construct($user, $load = 'model')
{
    if ($load == 'model')
    {
        $this->user_model = $user;
    }
    if ($load == 'id')
    {
        $this->user_model = ORM::factory('user', $user);
    }

}

しかし、それは本当に気分が悪いだけです。アドバイスをいただければ幸いです。

4

3 に答える 3

2

ORM を拡張するユーザー モデルが既にある場合、すべてのユーザーまたは特定のユーザーを取得するためにクラスに静的メソッドは必要ないでしょう。

コントローラーでは、すべてのユーザーを取得するために行うことができます

$users = ORM::factory('user')->find_all();

単一のユーザーを取得するには

$user = ORM::factory('user', $user_id);

それでもラッピングルートをたどりたい場合は、次のような関数を使用できます

public static function all() {
    $users = ORM::factory('user')->find_all();
    if (count($users)) {
        return $users;
    }
    return false;
}

public static function get($user_id) {
    $user = ORM::factory('user', $user_id);
    if ($user->id) {
        return $user;
    }
    return false;
}
于 2012-05-04T13:37:55.510 に答える
0

多分このように:

public function __construct($user)
{
    $this->user_model = is_object($user) ? $user : ORM::factory('user', (int)$user);
}
于 2012-04-28T06:12:52.953 に答える
0

コントローラーで、ORM を使用して ID に基づいてユーザーを取得します。

$user_id = $_POST['user_id'];
$user = ORM::factory('user', $user_id);

または、ユーザー クラスに既にすべて検索がある場合は、find_one() メソッドを追加します。

ユーザー クラス

public static function find_one($user_id)
{
    $user = ORM::factory('user', $user_id);
    return $user;
}

コントローラ

$user_id = $_POST['user_id'];
$user = User::find_one($user_id);

コハナのドキュメントを参照してください。
http://kohanaframework.org/3.1/guide/orm/using#finding-an-object
http://kohanaframework.org/3.1/guide/orm/examples/simple

于 2012-04-28T01:23:37.760 に答える