我正在考虑在使用Kohana PHP框架开发的应用程序中覆盖ORM类的save / create / update方法。
我想知道这样做是否是一个好习惯,利弊是什么。我这样做的原因是从控制器中取出所有重复的代码,并将其放在模型中重写的方法中的一个位置。
例如。考虑一个简单的民意调查应用。有两个ORM类 - 具有一对多关系的Model_Poll和Model_Choice。
现在,以下代码将被放置在控制器中以创建新的轮询,并且如果在$ _POST
中找到它也可以保存它的选择$poll = ORM::factory('poll');
$poll->name = 'some question ?';
$poll->save();
if ($this->request->post('choices')) {
foreach ($this->request->post('choices') as $choice) {
$c = ORM::factory('choice');
$c->name = $choice;
$poll->add($c);
}
}
我想将此更改为以下
在控制器中,
$poll = ORM::factory('poll');
$poll->name = 'some question ?';
$poll->set_choices($this->request->post('choices'));
$poll->save();
在Model_Poll中,
public function create(Validation $validation = null) {
$return = parent::create($validation);
if ($this->_choices) {
foreach ($this->_choices as $choice) {
$c = ORM::factory('choice');
$c->name = $choice;
$this->add($c);
}
}
return $return;
}
public function set_choices($choices) {
$this->_choices = $choices;
}
这个create方法将由save方法在内部调用。稍后,如果还有更多事情要做,我可以在这里做。
感谢您的帮助。
答案 0 :(得分:1)
您的选择对象不会被保存(需要$c->save()
),因此$this->add($c)
也不会有效。
为什么不使用这样的东西:
$poll->save();
$poll->set_choices($this->request->post('choices'));
set_choices()
方法将创建(如果需要)选项并保存当前民意调查的关系。