Cakephp 3.0でSalesテーブルから売上レポートを取得しているとします。残りのAPIを使用します。 あなたは、カスタマイズ、名前変更、
以下のREST APIのURLが
コントローラで
https://example.com/api/index.json?fromdate_utc=2016-10-03&todate_utc=2016-10-03
そしてfunctino以下のようなものは、以下のようなものになりますようにあなたがそれを行うことができますのREST APIの応答でいくつかのフィールドを追加したい場合: -
public function index($fromdate = null, $todate = null)
{
//set date range for
if(!empty($_GET['fromdate_utc']) && !empty($_GET['todate_utc'])){
// if from amd to date are same add +1 day in to date to get result
$to_date = date('Y-m-d', strtotime($_GET['todate_utc'] . ' +1 day'));
$dateRage = array('Sales.SalesDate >= ' => $_GET['fromdate_utc'], 'Sales.SalesDate <=' => $to_date);
}else{
$dateRage = array();
}
$conditions = array(
'and' => array($dateRage),
);
//$this->Auth->allow();
$sales = $this->Sales->find('all', array(
'conditions' => $conditions
))
->select(['SalesNo', 'SalesDate', 'TotalValue', 'TotalDiscount', 'NetTotal', 'PaymentMode', 'Status'])
->where(['StoreId' => '8','Status !=' => '2','Status !=' => '4'])->andWhere(['Status !=' => 1])->andWhere(['Status !=' => 4]);
//->limit(3);
$salesResponse = array();
//echo '<br/>Count no of output => '.$sales->count();
if($sales->count() >0){
foreach($sales as $key=>$salesData){
//re generate the array as per your requirements
$salesResponse[$key]['SalesNo'] = $salesData->SalesNo;
$salesResponse[$key]['SalesDate'] = $salesData->SalesDate;
$salesResponse[$key]['TotalValue'] = $salesData->TotalValue;
$salesResponse[$key]['TotalDiscount'] = $salesData->TotalDiscount;
$salesResponse[$key]['NetTotal'] = $salesData->NetTotal;
$salesResponse[$key]['SaleTax'] = 0; // add new fields that does not exist in database
$salesResponse[$key]['PaymentMode'] = $salesData->PaymentMode;
// change the status from numeric to character and pass it to response
if($salesData->Status == 5){
$salesResponse[$key]['Status'] = 'Refund';
}elseif($salesData->Status == 3){
$salesResponse[$key]['Status'] = 'Return';
}elseif($salesData->Status == 2){
$salesResponse[$key]['Status'] = 'Cancelled';
}elseif($salesData->Status == 0){
$salesResponse[$key]['Status'] = 'Complete';
}
}
}else{
$salesResponse = array('Error ! sorry not found any record.');
}
$this->set([
'sales' => $salesResponse,
'_serialize' => ['sales']
]);
}
Gregも同じことですが、Salesクラス内でステータステキストを返す保護された関数を作成できます。上記の私は別の関数を作成しません。私は同じ関数で条件を追加するだけです。そのもうまく動作します。 – kantsverma
解決策は正常に動作するはずです。新しいフィールドをテーブルに追加するたびに更新する必要があるため、ちょっと壊れやすいように見えます。 –
Gregもちろん、テーブルに新しいフィールドを追加する場合は、そのフィールドをコントローラとモデルに追加する必要があります。私はその罰金を望む、モデル内のフィールドだけでなく、コントローラに追加することなく、テーブルに新しいフィールドを追加する他のソリューションはありますか? – kantsverma