2012-08-27 57 views
1

我有兩個表usersuserslog其中i有users包含idusernameemailgenderuserslog和包含idfirstnamelastnamedesignationu_id這是foreign key of users table如何在zend中的兩個表中插入zend表單值?

我的註冊控制器

class RegisterController extends Zend_Controller_Action 
{ 

public function init() 
{ 
    /* Initialize action controller here */ 
} 

public function indexAction() 
{ 

    $form = new Application_Form_register(); 
    $this->view->form = $form; 

    if($this->getRequest()->isPost()) 
    { 
     $data = $this->getRequest()->getPost(); 
    } 


} 


} 

我的註冊模式是

class Application_Model_DBtable_register extends Zend_Db_Table 
{ 
protected $_name = 'users'; 
// i have to define two tables here!! how? 
} 

我的註冊Zend的形式

class Application_Form_register extends Zend_Form 
{ 
public function init() 
{ 
    $this->setName('register'); 
    $this->setMethod('post'); 

    $firstname = $this->createElement('text', 'firstname'); 
    $firstname->setLabel('FirstName: ') 
       ->setRequired(true) 
       ->setFilters(array(
         'stringTrim','StringToLower')); 

    $lastname = $this->createElement('text', 'lastname'); 
    $lastname->setLabel('LastName: ') 
      ->setRequired(true) 
      ->setFilters(array(
        'stringTrim','StringToLower')); 

    $email = $this->createElement('text', 'email'); 
    $email->setLabel('Email: ') 
      ->setRequired(true); 

    $username = $this->createElement('text', 'username'); 
    $username->setLabel('UserName: ') 
      ->setRequired(true) 
      ->setFilters(array(
        'stringTrim','StringToLower')); 

    $password = $this->createElement('password', 'password'); 
    $password->setLabel('Password: ') 
      ->setRequired(true); 

    $password2 = $this->createElement('password', 'password2'); 
    $password2->setLabel('Confirm Password: ') 
      ->setRequired(true); 

    $submit = $this->createElement('submit', 'register'); 
    $submit->setLabel('Register') 
      ->setIgnore(true); 

    $this->addElements(array(
      $firstname, 
      $lastname, 
      $email, 
      $username, 
      $password, 
      $password2, 
      $submit)); 
} 

}

我該怎麼辦呢?我們可以使用Zend_Auth進行身份驗證嗎?如果是的話how.please給我舉例。我看到了$_dependantTable$_referenceMaps,但我無法忍受它。我很困惑如何做到這一點,因爲我無法在課堂上多次定義表名。我必須在兩個不同的表中同時插入值。 Application_Model_DBtable_register

$db = new Application_Model_DBtable_register(); 

$db->instertValuesInUsers(array('column_name' => $data['value'], 'column_name' => $data['value'], ...........)); 

$db->insertValuesInUserslog(array('column_name' => $data['value'], 'column_name' => $data['value'], ...........)); 

在您:

+0

其實我有計劃,加上'userlog_id'在'user'當任何一個都可以在'userslog'更新一些數據,那麼一個新的行插入,而不是更新同一列。 'userslog'的主要ID將被插入'users'表中的'userslod_id'中。 –

回答

1

確定這是不正確:

class Application_Model_DBtable_register extends Zend_Db_Table 
{ 
protected $_name = 'users'; 
// i have to define two tables here!! how? 
} 

在其名稱中包含DbTable的類的意圖是它們是單個數據庫表的適配器/網關。

所以,你的問題將分解爲至少2班/文件:

class Application_Model_DBtable_Users extends Zend_Db_Table 
{ 
protected $_name = 'users'; 
} 

class Application_Model_DBtable_Userslog extends Zend_Db_Table 
{ 
protected $_name = 'userslog'; 
} 

我會在這個級別放一個方法在任何的類,它以註冊用戶所需的操作。稍後,您可能會決定使用映射器和域對象。

class Application_Model_DBtable_Users extends Zend_Db_Table 
{ 
    protected $_name = 'users'; 
    /* 
    * psuedocode not meant for production 
    */ 
    public function register($array $data) { 
     //sort out the data 
     $user = array();//put the elements from the $data array that you want to go into the users table 
     $userLog = array(); //same thing for the userslog table 
     //get userslog adapter 
     $userlogTable = new Application_Model_DbTable_Userslog(); 
     //do the first insert   
     $result = $this->insert($user); 
     //insert returns the primary key of the row created, 
     $u_id = array('u_id' => $result); 
     $userLog = array_merge($u_id, $userLog); //merge u_id with existing data 
     //perform second insert 
     $result2 = $userlogTable->insert($userLog); 
     //handle any errors 
    } 
} 

這將提供一個基本的例子來證明你可能需要實現您設計的步驟。 DbTable模型背後的要點是將連接抽象爲給定的表,每個表都有它自己的DbTable模型。 DbTable模型爲每個表提供一個適配器,並訪問由Zend_Db_Table_Abstract提供的api。

上面顯示的步驟可以輕鬆地在第三個模型或控制器本身中進行。

注:有可能離開與一條SQL語句來做到這一點,但我不是一個誰知道答案的人。

+0

thnx。 。但是如果有另一種方法不爲不同的表創建不同的類,那麼請幫助我! –

+0

有多種方法可以在不爲每個表創建類的情況下執行此操作。但是爲什麼呢,這是一個簡單的類,對於很多事情都很有用。如果您有要求不使用這些類,請更具體地說明您需要完成的任務。 – RockyFord

2

這樣才能插入用戶和userslog表中的值,你可以嘗試:

在你RegisterController

public function instertValuesInUsers(array $data) { 
    $this->insert($data); 
} 

public function insertValuesInUserslog(array $data) { 
    $db = new Zend_Db_Table(array('name' => 'userslog')); 

    $db->insert($data); 
} 
0

你可以嘗試這樣的:

public function insertNew($tb, $data) { 
    $db = new Zend_Db_Table(array('name' => $tb)); 
    $q = $db->insert($data); 
    if($q) 
     return true; 
    else 
     return false; 
} 
+0

一些解釋會很好。 – Nilambar