1

私は2つのテーブルusersを持っており、userslogそこには、、、が含まれusers、、、、が含まれています。これはです。 idusernameemailgenderuserslogidfirstnamelastnamedesignationu_idforeign key of users table

私のレジスターコントローラー

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?
}

私の登録ゼンドフォーム

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を使用できますか?はいの場合、どのように。例を教えてください。私は見ましたが$_dependantTable$_referenceMaps私はそれを理解することはできません。クラスでテーブル名を複数回定義できないため、その方法がわかりません。2つの異なるテーブルに同時に値を挿入する必要があります。

4

2 に答える 2

2

users および userslog テーブルに値を挿入するには、次のように試してください。

RegisterController で:

$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'], ...........));

あなたの Application_Model_DBtable_register では:

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

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

   $db->insert($data);
}
于 2012-08-27T14:39:33.280 に答える
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 へのアクセスを提供します。

上記の手順は、3 番目のモデルまたはコントローラー自体で簡単に実行できます。

注: 1 つの sql ステートメントでこれを行う方法はあるかもしれませんが、私はその答えを知っている人ではありません。

于 2012-08-28T05:01:39.827 に答える