如何在查询生成器 laravel 中执行此 SQL

Posted

技术标签:

【中文标题】如何在查询生成器 laravel 中执行此 SQL【英文标题】:How can I do this SQL in Query builder laravel 【发布时间】:2017-09-28 04:34:45 【问题描述】:

如何在查询构建器 laravel 中执行此 SQL

select Doctor_id from doctors where Doctor_id NOT IN
 (SELECT Doctor_id from report_reviewers WHERE Report_id = 26 )

【问题讨论】:

【参考方案1】:

试试这个

$result = DB::table('doctors')
->whereNotIn('doctor_id', function($q)
    $q->from('report_reviewers')
    ->select('Doctor_id')
    ->where('Report_id', '=', 26)
)
->select('doctor_id')
->get();

如果有疑问,如果您知道原始 SQL,您可以简单地做

$query = 'select Doctor_id from doctors ...';
$result = DB::select($query);

另外,感谢这位天才How to create a subquery using Laravel Eloquent?

更新

缺少的参数来自您正在使用的闭包

->whereNotIn('doctor_id', function($q,$id) 
    $q->from('report_reviewers') 
    ->select('Doctor_id') 
    ->where('Report_id',$id); 
) 

你需要像这样传递$id变量

->whereNotIn('doctor_id', function($q) use ($id)  
    $q->from('report_reviewers') 
    ->select('Doctor_id') 
    ->where('Report_id',$id); 
) 

再试一次看看。

【讨论】:

这个怎么样:$result = DB::table('doctors') ->join('users', 'doctors.UserID', '=', 'users.id') -> where('doctors.Acceptable',1) ->whereNotIn('doctor_id', function($q,$id) $q->from('report_reviewers') ->select('Doctor_id') ->where(' Report_id',$id); ) ->select('doctors.doctor_id','users.name') ->get();参数 2 中缺少 ($id) 哦,没关系。你忘恩负义。我的代码有效,您接受了我的回答。现在您需要进一步的帮助,即使它有效,您也不接受我的回答。一切都好,祝你有美好的一天。 感谢 EddyTheDove 帮助我编辑此 $this->xx = $id; 的答案; $result = DB::table('doctors') ->join('users', 'doctors.UserID', '=', 'users.id') ->where('doctors.Acceptable',1) -> whereNotIn('doctor_id', function($q) $q->from('report_reviewers') ->select('Doctor_id') ->where('Report_id',$this->xx); ) ->select ('doctors.doctor_id','users.name') ->get();

以上是关于如何在查询生成器 laravel 中执行此 SQL的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Lumen - Eloquent 查询日志

如何在 laravel 模型中转换此 sql 查询

如何在 laravel 查询生成器中为 sql 选择列添加别名?

Laravel - 查询生成器 - 使用 LPAD 语句的 SQL 字段

如何在 Laravel 查询中执行 IS NOT NULL

Laravel 8 - MS SQL - 查询生成器 - 使用 DB Raw。尝试使代码正确,使其像工作的 MSSQL 代码一样工作