2011-08-17 160 views
0

我们正在构建一个使用Zend Framework的在线支付系统,我们试图设计它来使添加新的支付系统变得更加容易。目前我们有一个针对PayPal的实现,但也许我们希望以后再添加其他提供者。扩展扩展类Zend_Db_Table_Row_Abstract

我们有一个扩展了Zend_Db_Table_Row_Abstract的支付对象和一个扩展了Zend_Db_Table_Abstract的Payments对象。 Payment对象现在在其行中有PayPal特定的数据,我们希望移动到不同的PayPal特定表。这使我们能够获得支付表中支付的一般数据和另一个支付提供商特定数据中的一般数据。

现在我们试着做一个类PayPalPayment扩展Payment和一个PayPalPayments类扩展Zend_Db_Table_Abstract。 PayPalPayments引用我们的新数据库表和新对象PayPalPayment。我们现在要做的是:

$ppp = new PayPalPayments(); 
$p = $ppp->createRow(); 
//set a paypal specific property. setToken is defined in PayPalPayment 
$p->setToken('lol'); 
//set a Payment general property. setStatus is defined in Payment 
$p->setStatus('paid'); 
//write to database 
$p->save(); 

然而,我们不能得到这个工作,因为createRow将只与在PayPalPayment表中的列返回一行。因此,这将给错误:

Specified column "pay_status" is not in the row 

找到了Zend框架文档中关系中的一些东西,但是这不是真的,我们要怎么做。任何人之前尝试过?

问候, 拉尔斯

回答

1

你在class PayPalPayments默认$_rowClass = 'PayPalPayment'申报?

+0

是的,我们做到了。问题是,如果我们这样做: $ p = new PayPalPayments(); $ payment = $ p-> createRow(); $ payment无法识别Payments表中的列,只能识别我们新的paypal_payments表中的列。因此,当我们尝试为付款表中的某个属性设置值时,它会给出该列不在该行中的错误。 – Lars