有没有更好的方法来重构这段代码?它基本上是具有不同值的同一行。我想过做一个 for 循环,但也许还有另一种方式。
$date = $request->date;
$underConsideration = Application::whereDate('created_at',$date)->where('status','Under consideration')->count();
$phoneScreened = Application::whereDate('created_at',$date)->where('status','Phone screened')->count();
$interviewed = Application::whereDate('created_at',$date)->where('status','Interviewed')->count();
$offerExtended = Application::whereDate('created_at',$date)->where('status','Offer extended')->count();
答案 0 :(得分:2)
您应该为此创建一个单独的方法。
public function myMethod()
{
$under_consideration = $this->fetchApplicationData($request, 'Under consideration');
$phone_screened = $this->fetchApplicationData($request, 'Phone screened');
$interviewed = $this->fetchApplicationData($request, 'Interviewed');
$offer_extended = $this->fetchApplicationData($request, 'Offer extended');
}
private function fetchApplicationData($request, $status)
{
return Application::
whereDate('created_at', $request->date)
->where('status', $status)
->count();
}
这是一个更简洁的代码。
但是,我建议您应该放置这些项目:
Under consideration, Phone screened, Interviewed, Offer extended
到数据库上的单独表中,然后将 status_id
保存在主表中。
这方面的主要优势之一是速度。例如,您的客户想知道某个日期范围内状态为 Interviewed
的所有记录。针对整数的数据库搜索比字符串快得多。
答案 1 :(得分:1)
您可以创建一个方法来处理选择操作。类似的东西:
public function yourExisitingMethod() {
$date = $request->date;
$underConsideration = getData($date,'Under consideration');
$phoneScreened = getData($date,'Phone screened');
$interviewed = getData($date,'Interviewed');
$offerExtended = getData($date,'Offer extended');
}
public function getData($date, $status) {
$data = Application::whereDate('created_at',$date)->where('status',$status)->count();
return $data;
}
这至少会提高代码的可维护性,并且在我看来提高了可重用性和可读性。