【问题标题】:how to write sql query to laravel如何将sql查询写入laravel
【发布时间】:2019-08-27 01:15:35
【问题描述】:

我有一个这样的 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();

【问题讨论】:

  • 你试过 DB Raw Query 吗?
  • 如果你将它“转换”为 Laravel,你会得到什么?查询生成器将构建与您相同的查询。只需使用DB::select()

标签: php sql laravel eloquent


【解决方案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')
            ->join('appointmentsettings as aps', 'p.id', '=', '')
             ->where(["user_id" => $id, 'Active' => 1]);
        })->orderBy('id')->get();

您在函数内的联接中有错误。试试上面的代码。

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

【讨论】:

    【解决方案2】:

    数据库查询方式

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

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 2016-06-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多