t_28
@t_28 (R .T)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

CakePHP4 一か月以内のもを表示するようにしたい

解決したいこと

 画面上に、登録した日付から二か月以内のものを表示させたいです。
AテーブルとBテーブルを結合させ、Bテーブルの開始日時から一か月以内のものを画面に表示させたいです。このとき、表示させる画面はAコントローラーの方で記述します。
 解決方法を教えて下さい。

該当するソースコード

NewEmployeesController.php
$date = FrozenTime::now();
$this->paginate = [
'conditions' => ['IndividualProjects.contract_end_date <=' =>'+1 months'],
'conditions' => ['contract_end_date' =>],
contain' => [
 'IndividualProjects' => function ($q) use ($date){
   return $q
      ->where(['IndividualProjects.contract_end_date >=' => $date])
      ->order(['contract_start_date' => 'DESC']);
   },
 'IndividualProjects.Users','Users'],

$individualProjects = $this->IndividualProjects->find('all',[                                      
  'contain' => ['Projects', 'NewEmployees', 'Users'],]);
$newEmployees = $this->paginate($this->NewEmployees); 
$this->set(compact('newEmployees','individualProjects'));

自分で試したこと

 現在日時取得してますが、やりたいことを実現するために現在日時はいらないと考えているのですがどうでしょうか?
 IndividualProjectsテーブルのcontract_end_dateに登録されえている日付から一か月以内と指定したいのですが、やり方が分かりません。上記のソースコードだとデータベースエラーになってしまいます。
 まだ試している途中ですがクロノスタイム使った方が行けそうな気がしました…
 アドバイスお願いします。

0

1Answer

IndividualProjectsテーブルのcontract_end_dateに登録されえている日付から一か月以内と指定したい

何が contract_end_date から1ヶ月以内なのかが記述されていないので
現在日時と仮定しての答えとなりますが、こんな感じでいかがでしょうか

現在日時から1ヶ月前の日付を取得し、それを contract_end_date と比較します

->where([
    'IndividualProjects.contract_end_date >=' => date("Y-m-d H:i:s", strtotime("-1 month")),
])
0Like

Your answer might help someone💌