1

私のコードは以下のとおりです

コントローラーコード:

class statController extends baseController {

public function index() {
    $this->registry->template->projectsWise = $this->selectProjectWise();
    $this->registry->template->show("stat");
}

private static function selectStat($query, $values) {

    $statMapper = new statMapper();
    $select = new common();
    $select->setItems($query);
    $select->setValues($values);
    return $statMapper->select($select);
}

private function selectProjectWise() {
    $date = date("Y-m-d");
    $values = array($date, $date);
    return self::selectStat("project_wise", $values);
}
private function selectLocationWise(){
    $date = date("Y-m-d");
    $values = array($date, $date, 1);
    return self::selectStat("location_wise", $values);
}

マッパーコード:

class statMapper extends baseMapper {

private $query = array(
    "project_wise" => "SELECT p.proj_Name, p.proj_Type, p.proj_Category, COUNT(ra.emp_Id) as allocation FROM project AS p, resource_assignment AS ra WHERE p.proj_Start_Date <= '%s' AND p.proj_End_Date >= '%s' AND p.proj_Status = 1 AND ra.proj_Id = p.proj_Id GROUP BY p.proj_Name ",
    "location_wise" => "SELECT e.user_Location, p.proj_Name, p.proj_Type, p.proj_Category, COUNT(ra.emp_Id) as allocation FROM project AS p, resource_assignment AS ra, employee as e WHERE p.proj_Start_Date <= '%s' AND p.proj_End_Date >= '%s' AND p.proj_Status = %d AND ra.proj_Id = p.proj_Id GROUP BY p.proj_Name "
);

public function select($select) {
    $connect = parent::connect();
    $query = sprintf($this->query[$select->getItems()], $select->getValues()[0], $select->getValues()[1]);
    try {
        $result = $connect->query($query);
        if ($result) {
            $table = array();
            while ($row = $result->fetch_object()) {
                $table[] = $row;
            }
            return $table;
            parent::disconnect();
        } else {
            throw (new Exception($connect->error . "<br/>" . $query . "<br/>"));
        }
    } catch (Exception $exp) {
        require_once 'views/error.php';
        exit();
    }
}

}

関数に 3 つの指定子を追加しまし($query->"location_wise")た。statController->selectLocationWise()それを使用するとき、手動で追加するのではなく、どのように$select->getValues()[2]値を追加しますかstatMapper->select()

4

1 に答える 1

0

配列全体を引数として渡す代わりに、http://www.php.net/manual/ru/function.vsprintf.phpを使用できます。sprintf

しかし、とにかくあなたのコードは見栄えが悪いです。StatMapper の外部ビューからは、引数のタイプもその数も特定する方法はありません。コードの保守が難しくなります。

Data Access Objects パターンまたは学習フレームワークを使用することをお勧めします。

于 2013-08-20T20:40:53.507 に答える