组合模型函数的正确方法

Proper way to combine model functions

我正在使用 Opencart,我的模型文件中有这些功能,它们本质上是相同的。有更好的方法吗?不断重复代码行似乎是一种浪费,但我不确定处理这种情况的正确方法是什么。我能以某种方式组合这些陈述吗?这是这样做的正确方法吗?我的 PHP 技能还不够完善,希望能在此提供一些建议。以下是函数

    public function getSum() {
            $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 12 MONTH) ");           
           return $query->row; 
    }
        public function lastThirty() {
            $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 1 MONTH)" );            
           return $query->row; 
    }
 public function lastYearNow() {
            $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 12 MONTH) ");           
           return $query->row; //will be giving this time last year, not figured out yet.
    }
        public function lastYearTotal() {
            $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL 1 MONTH)" );            
           return $query->row; //will be total for last last year, not figured out yet.
    }

您可以将重复的代码提取到一个方法中,并只给出月数(如果这是唯一的区别)作为参数。但是,为了冗长,我会保留所有其他方法。

您可以使用一个函数而不是四个函数,并使用一个参数作为动态值,即月份。所以你的方法看起来像这样:

public function getSum($month = 12) {
  $query = $this->db->query("SELECT SUM(amount) as amount_sum FROM " . DB_PREFIX . "donate Where date_added >= (CURDATE() - INTERVAL " . $month . " MONTH) ");           
  return $query->row; 
}

并且在调用此方法时,您可以传递您想要的月数结果,否则它将显示 12 个月的结果。希望对您有所帮助。

注意:建议保留所有这些方法,因为它们包含少量代码,并且在功能上您可能需要不同的方法来执行不同的操作。