Zend framework 如何在zend中的两个表中插入zend表单值?
我有两个表Zend framework 如何在zend中的两个表中插入zend表单值?,zend-framework,zend-form,zend-db,zend-db-table,zend-auth,Zend Framework,Zend Form,Zend Db,Zend Db Table,Zend Auth,我有两个表users和userslog,其中users包含id,username,email,gender和userslog包含id,firstname,lastname,designation和u\u id是用户表的外键 我的寄存器控制器 class RegisterController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ }
users
和userslog
,其中users
包含id
,username
,email
,gender
和userslog
包含id
,firstname
,lastname
,designation
和u\u id
是用户表的外键
我的寄存器控制器
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进行身份验证吗?如果是,那么如何。请给我举个例子。我看到了
$\u dependent table
和$\u referencemap
,但我无法理解它。我不知道该怎么做,因为我不能在一个类中多次定义表名。我必须在两个不同的表中同时插入值。要在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'], ...........));
在应用程序中\u Model\u DBtable\u寄存器:
public function instertValuesInUsers(array $data) {
$this->insert($data);
}
public function insertValuesInUserslog(array $data) {
$db = new Zend_Db_Table(array('name' => 'userslog'));
$db->insert($data);
}
好的,这是不正确的:
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语句才能做到这一点,但我不是知道答案的人。实际上,我计划在
user
中添加userlog\u id
,当任何人都可以更新userslog
中的某些数据时,就会插入一个新行,而不是更新同一列。userslog
的主id将插入到users
表中的userslod\u id
中。但是如果有另一种方法不为不同的表创建不同的类,那么请帮助我!有很多方法可以做到这一点,而无需为每个表创建类。但是为什么要麻烦呢,它是一个简单的类,对很多事情都很有用。如果您有不使用这些类的要求,请更具体地说明您需要完成的任务。