2017-03-09 58 views
1

我正在使用CakePHP 3.2 我對CakePHP有點新鮮。我試圖從Icases表中獲取創建日期在10天內的數據,但由於某種原因它只是返回第一行。任何人都可以讓我知道我做錯了什麼。檢索Table類中的數據CakePHP 3.2

我的控制器IcasesController

namespace App\Controller; 
    use App\Controller\AppController; 

    /** 
    * Icases Controller 
    * 
    * @property \App\Model\Table\IcasesTable $Icases 
    */ 
    class IcasesController extends AppController 
    { 
     public function index() 
     { 
      $case_count_data = $this->Icases->getCaseCountByAge(); 
      print_r($case_count_data); 
     } 
    } 

我的表類IcasesTable

namespace App\Model\Table; 

use Cake\ORM\Query; 
use Cake\ORM\RulesChecker; 
use Cake\ORM\Table; 
use Cake\Validation\Validator; 
use Cake\ORM\TableRegistry; 
use DateTime; 

class IcasesTable extends Table 
{ 

    /** 
    * Initialize method 
    * 
    * @param array $config The configuration for the Table. 
    * @return void 
    */ 
    public function initialize(array $config) 
    { 
     parent::initialize($config); 

     $this->table('icases'); 
     $this->displayField('name'); 
     $this->primaryKey('id'); 

     $this->belongsTo('Clients', [ 
      'foreignKey' => 'client_id' 
     ]); 
     $this->hasMany('Documents', [ 
      'foreignKey' => 'icase_id' 
     ]); 
     $this->belongsToMany('Users', [ 
      'foreignKey' => 'icase_id', 
      'targetForeignKey' => 'user_id', 
      'joinTable' => 'icases_users' 
     ]); 
    } 

    /** 
    * Default validation rules. 
    * 
    * @param \Cake\Validation\Validator $validator Validator instance. 
    * @return \Cake\Validation\Validator 
    */ 
    public function validationDefault(Validator $validator) 
    { 
     $validator 
       ->integer('id') 
       ->allowEmpty('id', 'create'); 

     $validator 
       ->dateTime('date_instruction_received') 
       ->allowEmpty('date_instruction_received'); 

     $validator 
       ->dateTime('date_online_invitation_last_sent') 
       ->allowEmpty('date_online_invitation_last_sent'); 

     $validator 
       ->dateTime('date_approved_for_allocation') 
       ->allowEmpty('date_approved_for_allocation'); 

     $validator 
       ->dateTime('date_consent_received') 
       ->allowEmpty('date_consent_received'); 

     $validator 
       ->dateTime('go_date') 
       ->allowEmpty('go_date'); 

     $validator 
       ->dateTime('date_last_referred_to_client') 
       ->allowEmpty('date_last_referred_to_client'); 

     $validator 
       ->dateTime('date_last_referred_to_qc_report') 
       ->allowEmpty('date_last_referred_to_qc_report'); 

     $validator 
       ->dateTime('date_last_referred_qc') 
       ->allowEmpty('date_last_referred_qc'); 

     $validator 
       ->dateTime('date_last_referred_sub') 
       ->allowEmpty('date_last_referred_sub'); 

     $validator 
       ->dateTime('date_last_state_change') 
       ->allowEmpty('date_last_state_change'); 

     $validator 
       ->dateTime('date_marked_for_archival') 
       ->allowEmpty('date_marked_for_archival'); 

     $validator 
       ->allowEmpty('state'); 

     $validator 
       ->integer('weight') 
       ->allowEmpty('weight'); 

     $validator 
       ->requirePresence('case_reference_i_d', 'create') 
       ->notEmpty('case_reference_i_d') 
       ->add('case_reference_i_d', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

     $validator 
       ->allowEmpty('special_intructions'); 

     $validator 
       ->allowEmpty('international'); 

     $validator 
       ->allowEmpty('name'); 

     $validator 
       ->requirePresence('sms_enabled', 'create') 
       ->notEmpty('sms_enabled'); 

     $validator 
       ->allowEmpty('client_reference'); 

     $validator 
       ->allowEmpty('position_applied_for'); 

     $validator 
       ->integer('age') 
       ->allowEmpty('age'); 

     $validator 
       ->dateTime('date_deleted') 
       ->allowEmpty('date_deleted'); 

     $validator 
       ->dateTime('date_modified') 
       ->allowEmpty('date_modified'); 

     $validator 
       ->dateTime('date_created') 
       ->requirePresence('date_created', 'create') 
       ->notEmpty('date_created'); 

     return $validator; 
    } 

    /** 
    * Returns a rules checker object that will be used for validating 
    * application integrity. 
    * 
    * @param \Cake\ORM\RulesChecker $rules The rules object to be modified. 
    * @return \Cake\ORM\RulesChecker 
    */ 
    public function buildRules(RulesChecker $rules) 
    { 
     $rules->add($rules->isUnique(['case_reference_i_d'])); 
     $rules->add($rules->existsIn(['client_id'], 'Clients')); 

     return $rules; 
    } 

    /** 
    * Gets Case count by age 0-10,10-15,15> days 
    * @return Array ['count0to10'=>00,'count10to15'=>00,'count15'=>00] 
    */ 
    public function getCaseCountByAge() 
    { 
     $casesTable = TableRegistry::get("Icases"); 

     $query = $casesTable->find("all",['condition'=>['Icases.date_created >' => new DateTime('-10 days')]]); 
     $data = $query->execute(); 

     return $data->fetch('assoc'); 

    } 
} 
+0

這幾條線有很多錯誤,我誠實地懶惰地解釋它。請閱讀博客教程並閱讀官方文檔中的ORM,它是查詢構建器和自定義查找器:http://book.cakephp.org – burzum

回答

2

你應該多根據CakePHP official Doc

public function getCaseCountByAge() 
{ 
    $casesTable = TableRegistry::get("Icases"); 

    $query = $casesTable->find("all",['condition'=>['Icases.date_created >' => new DateTime('-10 days')]]); 
    $data = $query->execute(); 

    return $data->fetch('assoc'); 

} 

這可能是非常簡單的閱讀和練習

public function getCaseCountByAge() 
    { 
     return $this->find("all",['condition'=>['Icases.date_created >' => new DateTime('-10 days')]])->all(); 
    }