Zend framework 从数组填充后保存行-Zend

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(

又是一个Zend框架问题!感谢您的帮助

我有一个DB table类,我想在发布表单时使用它来插入/更新行,我想使用save()方法,这样它就可以使用相同的方法

这是我的测试代码


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