重构具有不同值的多个相同查询

时间:2021-03-10 01:24:48

标签: laravel eloquent

有没有更好的方法来重构这段代码?它基本上是具有不同值的同一行。我想过做一个 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();

2 个答案:

答案 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;

}

这至少会提高代码的可维护性,并且在我看来提高了可重用性和可读性。

相关问题