1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

設定した日にちが来たらDBの値を変更するメソッドを作った

Last updated at Posted at 2019-09-07

設定した日にちが来たら、何らかの値を切り替えるようなメソッドを作成しました。
このメソッドは日にちが関係していることから、FUelPHPでバッチ処理をできるようにしています。

メソッドの作成

FuelPHPでバッチ処理を行わせるには、 fuel/app/tasks/ 以下のディレクトリ内のファイルにメソッドを定義する必要があります。
そして、ファイル名は「date.php」を作成して、以下のメソッドを定義していきます。

date.php
public function changeValue()
{
  $month = date("n");
  $day   = date("j");

  if     ( $day == "10" ) $day = "1";
  elseif ( $day == "20" ) $day = "2";
  elseif ( $day == "30" ) $day = "3";
  if ( $month == "2" )
  {
    if   ( $day == "29" ) $day = "4";
  }

  $sports = \Sport::query()
    ->where('hold', 2)
    ->where('hold_date', $month)
    ->where('hold_date2', $day)
    ->get();

  $query = \DB::query("SELECT hold, hold_date, hold_date2 FROM sports WHERE hold = 2 AND hold_date = :month AND hold_date2 = :day");
  $query->parameters(array('month' => &$month, 'day' => &$day));
  $result = $query->execute()->as_array();

  foreach ( $result as $key => $val )
  {
    if ( $val['hold_date'] == $month && $val['hold_date2'] == $day )
    {
      foreach ( $sports as $sport )
      {
        $sport->hold       = "1"
        $sport->hold_date  = "0"
        $sport->hold_date2 = "0"
        $sport->save()
      }
    }

    return true;
  }
}

date()string で取得されるので、注意が必要になります。

また、日にちは10日刻みで値を変更するようにしていて、2月時は29日で実行されるようにしました。

バッチ処理の定義

サーバーに接続した状態で crontab -e を実行します。
そして、以下を追記します。

0 5 * * * /ファイルまでのディレクトリ/oil r date:changeValue 2>&1

今回は、毎朝5時に実行するように定義しました。
これにて、設定した日にちが来たら、何らかの値を切り替えるようなメソッドの作成は完了しました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?