最初に投稿された質問です。Cake の経験は少しありますが、熟練しているとは言えません。モデル - 製品では、afterFind コールバックを使用して計算を行います。最初に、製品の保証がまだ有効かどうか (開始日 + 保証期間) を確認し、次に保証の残り時間を計算します。これを行うには、次を使用します。
$future = '+'.$results[$key]['Product']['warranty_period'].'months';
$startDate = $results[$key]['Product']['created'];
$endDate = date('Y-m-d', strtotime($future, strtotime($startDate)));
$curDate = date('Y-m-d');
if($endDate > $curDate){
$date1 = new DateTime($endDate);
$date2 = new DateTime($curDate);
$interval = $date1 -> diff($date2);
デフォルトでは、$interval は「01119」などの数字の文字列として返されます。次に、次のコードを実行して、0 年、11 か月、19 日として出力します。
//years
if($interval->y > 0){
$years = $interval->y.' years, ';
}
//months
if($interval->m > 0){
$months = $interval->m.' months, ';
}
//days
if($interval->d > 0){
$days = $interval->d.' days';
}
$results[$key]['Product']['warranty_time'] = $years.$months.$days;
}else{
$results[$key]['Product']['warranty_time'] = 'Expired';
}
これらの計算の結果は、afterFind から返された $results 配列に渡されます。これが私の実際の質問です: 残りの保証時間に従って $results 配列をソートするにはどうすればよいですか?
他のフィールドのいくつかで Paginator を使用しています。echo $this->Paginator->sort('name', Name); これは、レコード ASC または DESC をかなり迅速にソートするのに非常にうまく機能しますが、warranty_time フィールドでは機能しません。これは、cake が $interval を int やその他の数値データ型ではなく、文字列として認識しているためだと思われます。
$interval が '01119' のような 'number' として返されるのを見て、それに従って配列をソートし、ビューで書式設定を行うことは可能でしょうか? これを行うための最良のアプローチは何ですか?