2016-11-22 16 views
0

私たちが週末にいない限り、今後の週末の範囲内のすべてのジョブを返すには、これが必要です。それから、今週末にすべての仕事を返す必要があります。このロジックは見た目がいいですか?この機能は、今週または今週の週末の日付を常に返しますか?

public function index() 
{ 
    $friday = Carbon::parse("this friday 6 pm"); 
    $sunday = Carbon::parse("this sunday 11:59 pm"); 

    if ($friday < Carbon::now()){ 
     $friday = Carbon::parse("last friday 6pm"); 
    } 

    $jobs = Job::whereBetween('start_date', [$friday, $sunday])->get(); 
    return view('foo.bar.index', ['jobs' => $jobs]); 
} 

答えて

1

論理は聞こえるが、わからない。

これは、単体テストが本当にうまく処理できることの正確な種類です。彼らはあなたのロジックの欠陥を指摘し、あなたが間違っている場合には、それが再び起こらないことを確認する回帰テストを書くことができます。

何らかの理由でこれを実行できない場合は、local scopeに抽出し、php artisan tinkerコマンドを使用して自分でテストしてください。

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\Builder; 

class Job extends Model 
{ 

    // ... 

    function scopeForUpcomingWeekend(Builder $query) 
    { 
     $friday = Carbon::parse("this friday 6 pm"); 
     $sunday = Carbon::parse("this sunday 11:59 pm"); 

     if ($friday < Carbon::now()){ 
      $friday = Carbon::parse("last friday 6pm"); 
     } 

     return $query->whereBetween('start_date', [$friday, $sunday]); 
    } 

    // ... 

} 

ような何かこの方法では、より柔軟より多くの再利用可能とテストが容易です。その時点で実行する必要があるのは、tinkerコマンドです。

Psy Shell v0.7.2 (PHP 7.0.8-2+deb.sury.org~xenial+1 — cli) by Justin Hileman 
>>> $jobs = \App\Job::forCommingWeekend()->get(); 
>>> $job = $jobs->first(); 
>>> $job->start_date = \Carbon\Carbon::parse('2012-9-5 23:26:11'); 
>>> $job->save(); 
>>> $jobs = \App\Job::forCommingWeekend()->get(); 

これをやり直す方法が見つかるまで、繰り返してください。

+0

ありがとうございます!私たちは本当に厳しい締め切りですが、私はユニットテストの重要性をもう一度説明しました。私はこれを、なぜ、迅速に対処するのではなく、正しく行動するために時間をかけ続けるべきかの例として使用します。 –

関連する問題