2009-08-03 18 views
1

私は、あなたがクラスZend_Db_Table_Abstractを継承し、クラスUserがZend_Db_Table_Row_Abstractを拡張し、Usersの$ _rowClassプロパティをUserに設定することができると私は理解します。新しい行を作成し、保存するにはZend Frameworkでテーブルクラスなしで新しい行を作成するにはどうすればよいですか?

、私は次の操作を実行する方法を知っている:

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

あなたは、私が代わりにfollwing行うことができますどのように教えてもらえますか?サイドノートとして

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

、私はまた、特定の行を取得するには、次の構文を使用しようと検討している:

$user = new User($userID); 

が、これは新しいユーザーを作成しようとしていないことが与えられたが、既存のユーザーを取得するには、次の構文がより読みやすくなると思います。あなたはどう思いますか?

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

答えて

0

だけでなく、3つのオプションがあります。

  • すべてのクラスのためにこれを実装し、この機能
  • を提供するために、独自の抽象baseclassesにそれらをサブクラス
  • Zend Frameworkに基本クラスにこのハックはそれ自身で...

言うまでもなく、第2のオプションはかなり良いです... note t帽子これはとてもクールではありません。

$user = new User($userID); 

あなたは抽象スーパークラスにするたびに、コンストラクタのパラメータを転送する必要があります...これは非常に迷惑することができ...

最後のオプションは、もちろん例えば、motion-twins SPODのように、それは非常に軽量で、小型でシンプルなので、他のフレームワークとうまく組み合わされているので、もっと個人的には好きです設計され、集中化され、あなたが書いたコードはより直感的に見えます...または、あなたにインスピレーションを与えることができます。あなたが望むようにあなたのために働くzendフレームワークをパッチする方法...

役立ちます希望...

greetz

back2dos

0

私はどのようにZendのDBのテーブルクラスなどの仕事を知らないので、私は別のオプションを提供します。

にです多くの異なるクラスのためにするのは面倒でおそらくあまりにも多くの作業ですが、あなたは何かをすることができます。

それはやっかいだけど、それがバットから出ることができる唯一の選択肢だ。

0
class User extends UserModel { 

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

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

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

1

ここ表オブジェクトせずに新しい行のインスタンスを構築する方法は次のとおり

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

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

表オブジェクトなしで、データベース内の指定された行の行インスタンスを構築する方法は次のとおり

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 

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

関連する問題