1

クラス Users extends Zend_Db_Table_Abstract とクラス User extends Zend_Db_Table_Row_Abstract を使用して、Users の $_rowClass プロパティを User に設定できることを理解しています。

新しい行を作成して保存するには、次の方法しか知りません。

$users = new Users()
$user = $users->createRow();
$user->name = 'name';
$user->save();

代わりに次のことを行う方法を教えてもらえますか?

$user = new User();
$user->name = 'name';
$user->save();

補足として、次の構文を使用して特定の行を取得することも検討しています。

$user = new User($userID);

ただし、これは新しいユーザーを作成しようとしているのではなく、既存のユーザーを取得しようとしていることを考えると、次の構文の方が読みやすいと思います-どう思いますか?

$users = new Users();
$user = $users->fetchRow($userID);
4

4 に答える 4

1

Table オブジェクトを使用せずに新しい行インスタンスを作成する方法は次のとおりです。

class User extends Zend_Db_Table_Row_Abstract
{
  protected $_tableClass = "Users";
}

$user = new User();
$user->name = "name";
$user->save();  // performs an INSERT

Table オブジェクトを使用せずに、データベース内の特定の行の行インスタンスを作成する方法を次に示します。

class User extends Zend_Db_Table_Row_Abstract
{
  protected $_tableClass = "Users";

  public function __construct(array $config = array())
  {
    if (isset($config["key"]) {
      $table = $this->_getTableFromString($this->_tableClass);
      $rowset = call_user_func_array(array($table, "find"), (array) $config["key"]);
      $row = $rowset->current();
      if ($row != false) {
        $config["data"] = $row->toArray();
        $config["stored"] = true;
      }
    }
    parent::__construct($config);
  }
}

$user = new User(array("key"=>$userid));
$user->name = "name";
$user->save(); // performs an UPDATE

注意: これらのコード サンプルはテストされていません。

于 2009-08-05T20:31:43.277 に答える
0

ええと、3つのオプションがあります:

  • これをzendフレームワークの基本クラスにハックします
  • これらを独自の抽象ベースクラスにサブクラス化して、この機能を提供します
  • すべてのクラスに独自にこれを実装します...

言うまでもなく、2番目のオプションは非常に優れています...これはそれほどクールではないことに注意してください。

$user = new User($userID);

コンストラクターパラメーターを毎回抽象スーパークラスに転送する必要があります...これは非常に煩わしい場合があります...

もちろん、最後のオプションは、あなたが説明したようにすでに機能する別の何かを使用することです。たとえば、モーションツインSPODは、非常に軽量で、小さく、シンプルであり、統合されているため、個人的にはもっと好きです。他のフレームワークとの相性も良く、さらに、より適切に設計および一元化されており、それを使用して記述したコードはより直感的に見えます...または、zendフレームワークにパッチを適用して希望どおりに機能させる方法を刺激する可能性があります...

それが役立つことを願っています...

グリーツ

back2dos

于 2009-08-03T09:40:03.140 に答える
0

Zend DB テーブル クラスなどがどのように機能するかがわからないため、別のオプションを提供します。

それは面倒で、おそらく多くの異なるクラスで行うには多すぎる作業ですが、次のようなことができます

class User {
    public function __construct($userID) {
        //initialize the db
        $db = Zend_Db::factory(...);

        $sql = $db->quoteInto("select * from users where user_id = ?", $userID);

        $userObject = $db->query($sql)->fetchObject();

        //now $userObject has all the data of that particular user
    }

    public function save() {
        //first gather this user's data into an array, $userData
        //put the user id into $user_id

        $db->update('users', $userData, 'user_id = $user_id);

    }
}

ずさんですが、それがすぐに思いつくことができる唯一の代替手段です。

于 2009-08-04T07:57:38.750 に答える
0
 class User extends UserModel {

        function __construct($userid=NULL){
           parent::__construct()

           if($userid!=NULL){
                return $this->find($userid);
           }else{
                return $this->createRow();
           }
        }
     }

しかし、正直なところ、その違いは価値がありません。

于 2009-08-05T14:40:58.483 に答える