2012-04-02 12 views
1

Ich habe eine sehr komplizierte Funktion in einem meiner CI-Modelle, also versuche ich, es zu optimieren und es robuster zu machen. Ich bin nicht sicher wo genau das Problem ist, also werde ich das Original einfügen (Arbeits) Variante und was ich getan habe, um es besser zu machen. Ich denke in den meisten Fällen sollte es funktionieren, aber obv. Ich habe irgendwo einen Fehler gemacht. HierOpting Active Record in CodeIgniter

ist die ursprüngliche Funktion:

public function get($data) 
    { 
     if (isset($data)) 
     { 
      if (isset($data['sort'])) 
      { 
       $sort = json_decode($data['sort'], true); 
       $this->db->order_by($sort[0]['property'], $sort[0]['direction']); 
      } 

      if (isset($data['query']) && $data['query'] != '') 
      { 
       $fields = json_decode($data['fields'], true); 
       $where = $fields[0] . " LIKE '%" . $data['query'] . "%'"; 
       unset($fields[0]); 
       foreach ($fields as $field) 
       { 
        $where .= ' OR ' . $field . ' LIKE ' . "'%" . $data['query'] . "%'"; 
       } 
       $this->db->select('id, email, firstname, lastname, usertype, ts_created, ts_last_login, position'); 
       $this->db->from('users'); 
       $this->db->where($where); 
       $this->db->limit($data['limit'], $data['start']); 
       $query = $this->db->get(); 
       $result = $query->result_array(); 
      } 
      else 
      { 
       $this->db->select('id, email, firstname, lastname, usertype, ts_created, ts_last_login, position'); 
       $this->db->from('users'); 
       $this->db->limit($data['limit'], $data['start']); 
       $query = $this->db->get(); 
       $result = $query->result_array(); 
      } 

      if ($result != null) 
      { 
       return $result; 
      } 
      else 
      { 
       return null; 
      } 
     } 
     else 
     { 
      $query = $this->db->select('id, email, firstname, lastname, usertype, ts_created, ts_last_login, position'); 
      $query = $this->db->get('users'); 
      $result = $query->result_array(); 
      return $result; 
     } 
    } 

Und hier ist das, was ich getan habe:

public function get($data) 
    { 

     if (isset($data)) 
     { 
      if (isset($data['sort'])) 
      { 
       $sort = json_decode($data['sort'], true); 
       $orderCoulmn = $sort[0]['property']; 
       $orderDir = $sort[0]['direction']; 
      } 

     $limit = $data['limit']; 

     $start = $data['start']; 

     } 

     $this->db->select('id, email, firstname, lastname, usertype, ts_created, ts_last_login, position'); 

    /* if (!empty($where)) 
     { 
      $this->db->where($where); 
     }*/ 
     if (isset($data['query']) && $data['query'] != '') 
     { 
      $fields = json_decode($data['fields'], true); 
      //$this->db->like($fields[0], $data['query']); 
      //unset($fields[0]); 

      foreach ($fields as $filed) 
      { 
       $this->db->or_like($field, $data['query']); 
      } 
     } 

     if (!empty($limit) && !empty($start)) 
     { 
      $this->db->limit($limit, $start); 
     } 

     if (!empty($orderColumn) && !empty($orderDir)) 
     { 
      $this->db->order_by($orderColumn, $orderDir); 
     } 

     $query = $this->db->get('users'); 
     $result = $query->result_array(); 

     return $result; 
    } 

Irgendwelche Ideen, wo das Problem in meinem Code sein könnte (der zweite)? Dank Leron

+1

Wenn Sie sprechen uns durch den Code und oder sagen Sie uns, was Sie erreichen möchten, es könnte einfacher sein, Ihnen zu helfen. – Tobias

+0

Nun, ich weiß nicht genau was ich dazu sagen soll. Es ist ein Arbeitsfunktionsteil von einem Arbeitsprogramm. Ein Teil von meiner Lehre ist, den Code zu optimieren. Mit anderen Worten, um es in einer besseren Form umzuschreiben. Sie können sehen, was ich meine, indem ich auf die Originaldatei schaue und was ich jetzt sine gemacht habe. $ data ist eine Variable, die Werte aus einem Suchmenü enthält ... – Leron

Antwort

0

Ich sehe nicht direkt was mit Ihrem Beispiel falsch ist, aber das ist, wie ich die Dinge vereinfachen würde:

public function get($data) 
{ 
    $this->db->select('id, email, firstname, lastname, usertype, ts_created, ts_last_login, position'); // same for every situation 

    if (is_array($data)) // a little stricter than testing if it's set, could be a string. 
    { 
     $this->db->limit($data['limit'], $data['start']); // do anyhow if $data is an array 

     if ($data['sort']) // if this evaluates to true, execute 
     { 
      $sort = json_decode($data['sort'], true); 
      $this->db->order_by($sort[0]['property'], $sort[0]['direction']); 
     } 

     if ($data['query']) 
     { 
      $fields = json_decode($data['fields'], true); 
      $where = ""; 
      $seperator = ""; 
      foreach($fields as $field) 
      { 
       $where .= "{$seperator}$field LIKE '%{$data['query']}%'"; 
       $seperator = ' OR '; // using this "seperator" approach, allows you to easily concat strings. 
      } 
      $this->db->where($where); 
     } 
    } 

    // finally, get a result, with possible other db actions, depending on $data 
    $query = $this->db->get('users'); 
    $result = $query->result_array(); 
    return $result; 
} 

Denken Sie daran: KISS und trocken sind deine Freunde;)