2012-02-14 4 views
1

Y a-t-il un meilleur moyen pour moi de calculer ce qui suit (J'essaie de récupérer tous les "Action Items" d'hier et les stocker dans "paste_due", et tous les items d'action pour aujourd'hui et les stocker dans « aujourd'hui ») - C'est à l'intérieur de mon « Agents » contrôleur (ActionItem et ActionItem « belongsTo » Agent) Agent « hasMany »:CakePHP: Plage de dates

public function planner() { 

    $yesterday = date("Y-m-d 23:59:59", strtotime("yesterday")); 
    $conditions = array('ActionItem.due <' => $yesterday, 'ActionItem.agent_id' => '1'); 
    $this->set('past_due', $this->Agent->ActionItem->find('all', array('conditions' => $conditions))); 

    $today = date("Y-m-d 00:00:00", strtotime("today")); 
    $today_end = date("Y-m-d 23:59:59", strtotime("today")); 
    $conditions = array('ActionItem.due >' => $today, 'ActionItem.due <' => $today_end, 'ActionItem.agent_id' => '1'); 
    $this->set('today', $this->Agent->ActionItem->find('all', array('conditions' => $conditions))); 
} 

les travaux ci-dessus, mais je ne suis pas sûr si c'est le meilleur façon d'aller à propos de i ..

Répondre

0

Il y aurait de la place pour une certaine amélioration (bien que, comme vous le dites, le code actuel devrait fonctionner, donc c'est juste certaines de mes pensées).

Tout d'abord, si vous allez seulement vérifier contre les temps comme 00:00:00 et 23:59:59, laissez tomber les temps tout à fait et il suffit d'utiliser un champ DATE plutôt qu'un champ DATETIME. Cela rend le contrôle beaucoup plus facile car vous n'avez pas à vous inquiéter des temps. (Si les temps sont essentiels pour d'autres parties de votre application, le code exemple ci-dessous doit être ajustée en conséquence.)

De plus j'utiliser les que le date() avec strtotime(), DateTime fonctions de PHP plutôt, principalement parce qu'il est à peu près une habitude de la mienne chaque fois que je travaille avec des données date/heure. C'est parce que DateTime ajoute beaucoup de possibilités et de flexibilité à vos données de date et d'heure sans trop de tracas. Quelque chose comme ceci est ce que je ferais probablement pour:

public function planner() { 

    // Set the DateTime object (defaults to current date/time) 
    $today = new DateTime(); 

    // Overdue actions (everything older than today) 
    $overdue = $this->Agent->ActionItem->find('all', array(
     'conditions' => array(
      // Check due against a 'Y-m-d' formatted date of today. 
      'ActionItem.due <' => $today->format('Y-m-d'), 
      'ActionItem.agent_id' => '1' 
     ) 
    )); 

    // Actions due today (or in the future) 
    $due = $this->Agent->ActionItem->find('all', array(
     'conditions' => array(
      // Check due against a 'Y-m-d' formatted date of today. 
      'ActionItem.due >=' => $today->format('Y-m-d'), 
      'ActionItem.agent_id' => '1' 
     ) 
    )); 

    // Set the items 
    $this->set(compact('overdue', 'due')); 
}