除非我们在周末,否则我需要这个来返回即将到来的周末范围内的所有工作。然后我需要它来返回当前周末内的所有工作。这个逻辑听起来不错吗?
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]);
}
答案 0 :(得分: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();
然后重复,直到找到打破它的方法。