Как написать SQL-запрос в Laravel - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть SQL-запрос, как это, и я хочу преобразовать его в laravel, как я могу это сделать?

Я пробовал, но я путаюсь на wherein и 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

вот что я пытаюсь

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 голосов
/ 05 апреля 2019

DB, способ запроса

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();
0 голосов
/ 05 апреля 2019
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() только в конце запроса, а не внутри самой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...