如何将sql查询写入laravel

i have a sql query like this and i want to convert it to laravel how i can do it?

i have try it, but i confusing on wherein and join

sql query

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

here what i try

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();
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();

You have an error in your join inside the function. Try the above code.

Also you must use get() only at the end of the query and not inside the function itself.

DB Query way

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();