如何将SQL查询写入laravel

时间:2019-04-05 07:23:52

标签: php sql laravel eloquent

我有一个这样的SQL查询,我想将其转换为laravel,我该怎么做?

我尝试过,但是在whereinjoin上感到困惑

sql查询

SELECT MIN(StartFrom) as StartFrom,MAX(EndTo) as EndTo from appointmentsettings 
WHERE day=1 
and PersonID IN (
    SELECT p.id
    FROM users p
        JOIN appointmentsettings aps ON p.id = aps.PersonID 
    WHERE p.active=1 AND aps.CompanyID = 1 OR aps.PersonID IN(
        SELECT cps.user_id 
            from companypersonstructs cps
            WHERE cps.CompanyID =1          
    )  group by aps.PersonID        
)
and active=1

这是我尝试的

Appointmentsetting::select('StartFrom', 'EndTo')
->min('StartFrom')
->max('EndTo')
->where(['Day'=>$day, 'Active'=>1])
->whereIn('PersonID', function ($query) use ($id) {
    $query->select('p.id')
          ->from('users as p')
            $query->join('appointmentsettings as aps', 'p.id', '=', '')
        ->where(["user_id" => $id, 'Active' => 1])->get();
        })->orderBy('id')->get();

2 个答案:

答案 0 :(得分:0)

Appointmentsetting::select('StartFrom', 'EndTo')
    ->min('StartFrom')
    ->max('EndTo')
    ->where(['Day'=>$day, 'Active'=>1])
    ->whereIn('PersonID', function ($query) use ($id) {
        $query->select('p.id')
            ->from('users as p')
            ->join('appointmentsettings as aps', 'p.id', '=', '')
             ->where(["user_id" => $id, 'Active' => 1]);
        })->orderBy('id')->get();

在函数内部的联接中出错。试试上面的代码。

此外,您只能在查询结束时使用get(),而不能在函数本身内部使用。

答案 1 :(得分:0)

数据库查询方式

DB::table('appointmentsettings')->join('users','p.id','=','')
->select(DB::raw('MIN(StartFrom) as StartFrom','Max(EndTo) as EndTo'))
->where([['user_id',$id],['Active','1']])
->groupBy('appointmentsettings.PersonID)
->orderBy('id','ASC')
->get();