我正在使用phpactiverecord。我有一个Order
对象,其中包含id
和code
。在数据库上,id
是主键int和自动增量。 code
是一个varchar且唯一的,由id和其他字符组成。
问题是我需要在保存之前设置代码值,为此,我需要获取id。
目前我做了:
class Order extends ActiveRecord\Model{
function save() {
if (parent::save()): // I save all data
$this->code = "{$this->id}w"; // Once it was saved I get the id
parent::save(); // I save the code
return true;
endif;
return false;
}
}
有更优雅的方式吗?
答案 0 :(得分:1)
你在技术上不应该以这种方式覆盖save(),因为即使在这种情况下你正在改变方法签名,(它是public function save($validate=true)
)。你的案例有很多可能的回调。对你的案子更好的方法是:
public static $after_create = array('after_create');
public function after_create()
{
$this->code = $this->id.'w';
$this->save();
}
如果在类代码中使用模板,那么使用模板也很尴尬:P。 如果您没有github的最新版本,此代码可能会失败,因为之前有一个bug,其中after_create不知道该对象已经保存。