0

Doctrine のような実際の ORM を使用することを考えましたが、そのダウンロード リンクが壊れていることもわかりました...そしてオンラインのすべてのチュートリアルは 2011 年にさかのぼります。また、yaml ファイルを作成する必要があります。

次に、ORM スタイルで独自のモデル クラスを作成することから始めます。

フィールドを入力してデータベースに保存するだけです。これは簡単です。

しかし、データベースからデータを取得しようとすると問題が発生します。

class User extends CI_Model {

    public $id;
    public $email;
    public $displayName;

 public function save() {
  .....
 }

public function search_by_email($email) {
    $user = new User();
    $this->db->select('email')->from('user')->where('email', $email);
    $result = $this->db->get();
    if ($result->num_rows()==0) {
        return false;
    }else {
        foreach ($result->result() as $field) {

        }
    }
}

通常、CodeIgniter では を返しますが$query->result()、ORM カスタムと同様に、オブジェクトを返そうとしています...これを行う方法はありますか? どの機能を使用すればよいですか?

4

2 に答える 2

1

resultインスタンス化し、結果データを割り当てるクラスを表す文字列を取ります (各フィールドはオブジェクトのプロパティとして):

$query = $this->db->query("SELECT * FROM users;");

foreach ($query->result('User') as $row)
{
   echo $row->name; // call attributes
   echo $row->reverse_name(); // or methods defined on the 'User' class
}

あなたのコメントに関しては、メソッドに渡すクラスに関して codeigniter が何も知らないresultと確信しています。それをインスタンス化し、db から返された各列/値のプロパティと値を設定するだけのように見えます。

$this->custom_result_object[$class_name][$i] = new $class_name();

foreach ($this->{$_data}[$i] as $key => $value)
{
    $this->custom_result_object[$class_name][$i]->$key = $value;
}
于 2013-09-24T01:49:43.343 に答える
0

codeIgniter で非常にうまく機能する ORM の 1 つは、Rails アクティブ レコード モデルに基づくphp-activerecordです。

「search_by_email」をコピーしようとしている機能は、

Late static binding method.

したがって、次のように呼び出される関数が表示される場合があります。

Object::find_by_email()

Object::search_by_email()
于 2013-09-24T01:50:37.780 に答える