Nasıl Zend Framework tablo sınıf olmadan yeni bir satır oluşturabilirim?

4 Cevap php

Ben sınıf Kullanıcılar Zend_Db_Table_Abstract genişletir ve sınıf Kullanıcı Kullanıcı için Kullanıcıların $ _rowClass özelliğini ayarlayarak, Zend_Db_Table_Row_Abstract uzanır olabilir anlıyorum.

Oluşturmak ve yeni bir satır kaydetmek için, ben sadece aşağıdakileri yapmak için biliyorum:

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

Eğer yerine follwing bunu nasıl söyleyebilir?

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

Bir yan not olarak, ben de, belirli bir satır almak için aşağıdaki sözdizimini kullanın çalışıyorum düşünüyorum:

$user = new User($userID);

Bu, yeni bir kullanıcı oluşturmak için ancak varolan bir kullanıcıyı almaya çalışıyor olmadığını ancak göz önüne alındığında, ben aşağıdaki sözdizimi daha okunaklı olabilir düşünüyorum - Sen ne düşünüyorsun?

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

4 Cevap

Burada bir Table nesnesi olmadan yeni bir satır örneği oluşturmak için nasıl:

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

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

Burada bir Table nesnesi olmadan, veritabanındaki belirli bir satır için bir satır örneği oluşturmak için nasıl:

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

NB: Bu kod örnekleri test edilmez, sana bırakacağım.

iyi, üç seçenek vardır:

  • Zend Framework temel sınıflar içine bu kesmek
  • Bu özelliği sağlamak için kendi soyut baseclasses onları alt sınıf
  • kendi her sınıf için bu uygulamaya ...

söylemeye gerek yok, 2. seçenek oldukça iyi ... Bu çok cool olmadığını unutmayın:

$user = new User($userID);

Eğer soyut süper sınıf için her zaman yapıcı parametre iletmek zorunda kalacak ... bu oldukça can sıkıcı olabilir ...

son seçenek, tabii ki, zaten bunu açıklanan şekilde, örneğin, motion-twins SPOD işleri farklı bir şey, kullanmak olacaktır hangi şahsen çok daha fazla gibi ben, çok hafif, küçük ve basit, çünkü ve böylece diğer çerçeveler ile iyi entegre, artı sizin için istediğiniz şekilde çalışmak için Zend Framework yama nasıl, daha iyi tasarlanmış ve merkezi olduğunu ve onunla yazmak kod daha sezgisel görünüyor ... ya da size ilham verebilir ...

yardımcı olur umarım ...

 class User extends UserModel {

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

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

Ama dürüst olmak gerekirse, farkı buna değer değildir.

Ben nasıl Zend DB tablo sınıfları ve benzeri iş bilmiyorum, ben başka bir seçenek sunuyoruz:

Birçok farklı sınıflar için yapılacak hantal ve muhtemelen çok çok iş var ama sen gibi bir şey yapabilirsiniz

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);

    }
}

Bu özensiz ama ben yarasa ile gelip tek alternatiftir.