Php 如何将sql查询写入laravel
我有一个类似这样的sql查询,我想把它转换成laravel,我该怎么做 我已经试过了,但我对Php 如何将sql查询写入laravel,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,我有一个类似这样的sql查询,我想把它转换成laravel,我该怎么做 我已经试过了,但我对其中和加入 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 =
其中
和加入
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();
函数内部的联接中存在错误。试试上面的代码
您还必须仅在查询结束时使用get()
,而不能在函数本身内部使用。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();
您是否尝试过DB Raw查询?如果您将其“转换”为Laravel,您将获得什么?查询生成器将构造与您相同的查询。只需使用
DB::select()
。
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();