Zend framework 从数组填充后保存行-Zend
又是一个Zend框架问题!感谢您的帮助 我有一个DB table类,我想在发布表单时使用它来插入/更新行,我想使用save()方法,这样它就可以使用相同的方法 这是我的测试代码Zend framework 从数组填充后保存行-Zend,zend-framework,zend-db,zend-db-table,Zend Framework,Zend Db,Zend Db Table,又是一个Zend框架问题!感谢您的帮助 我有一个DB table类,我想在发布表单时使用它来插入/更新行,我想使用save()方法,这样它就可以使用相同的方法 这是我的测试代码 $userArray=array('userID'=>1, “firstName”=>“Test”, “lastName”=>“Test”, '电子邮件地址'=>'test@hotmail.com' ); $user=new DBTables_Users() $newUserRow=$user->createRow(
$userArray=array('userID'=>1,
“firstName”=>“Test”,
“lastName”=>“Test”,
'电子邮件地址'=>'test@hotmail.com'
);
$user=new DBTables_Users()
$newUserRow=$user->createRow($userArray)
$newUserRow->save();
这在没有“userID”项的情况下可以很好地工作,并且可以很好地插入,但是如果我在其中添加该项,它会尝试再次插入该项,并且会出现重复键错误
对我来说,行应该确认主键的存在,并将其用作where子句来更新行。然而,在深入研究代码之后,为了确定它是插入还是更新,它要检查的唯一一件事是存在“_cleanData”变量,如果配置有一个“data”选项,而在使用createRow方法时它没有该选项,则该变量将在构造时填充
我这样做是错误的还是需要一个丑陋的修复程序来设置覆盖中的_cleanData属性
干杯
Stuart这样的更改将无法插入具有用户指定主键(例如,从序列中预取的自然主键)的行。它不能仅仅基于数组包含主键的事实,就假定表已经包含了行
您可以编写一个新函数,类似于
createRow
,它使用'stored'=>true
构造行实例。如果条目是新条目,您肯定不会从表单中传递ID吗
您不能快速检查它是否为null或空,然后调用insert而不是update吗
不要试图用一种方法做太多的事情,如果他们做不同的任务,就把他们分开
下面是我的insert/update方法的一个例子,它位于一个扩展Zend_Db_表(Zend Framework 1.8)的类中
这是一个公平的观点。是否有方法指示手动更新/插入行?比如一个修改过的标志或什么的?我的回答解决了这个问题还是你需要更多的信息?谢谢
//Users Db Table class
class DBTables_Users
extends Zend_Db_Table_Abstract
{
protected $_name
= "users";
protected $_primary
= "userID";
}
$userArray = array( 'userID' => 1,
'firstName' => 'Test',
'lastName' => 'Test',
'emailAddress' => 'test@hotmail.com'
);
$user = new DBTables_Users();
$newUserRow = $user->createRow($userArray);
$newUserRow->save();
public function insertQuote($quote)
{
$data = array('id'=>null,'quote'=>$quote, 'dateCreated'=>NOW());
$id = $this->insert($data);
return $id;
}
public function updateQuote($id, $quote)
{
$data = array(
'quote'=>$quote
);
$this->update($data, 'id = ' . (int)$id);
}