0

我正在考虑在使用 Kohana PHP 框架开发的应用程序中覆盖 ORM 类的保存/创建/更新方法。

我想知道这样做是否是一种好习惯以及利弊。我这样做的原因是将所有重复的代码从控制器中取出,并将其放在模型中被覆盖的方法中的一个位置。

例如。考虑一个简单的民意调查应用程序。有两个 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 方法在内部调用。以后,如果有更多的事情要做,我可以在这里自己做。

谢谢你的帮助。

4

1 回答 1

1

您选择的对象将不会被保存($c->save()必需),因此$this->add($c)也不会起作用。

为什么不使用这样的东西:

$poll->save();
$poll->set_choices($this->request->post('choices'));

Whereset_choices()方法将创建(如果需要)选择并保存当前投票的关系。

于 2011-08-29T13:43:11.193 回答