mysql - 将 Laravel 查询生成器方法 whereIn() 与子查询一起使用

标签 mysql laravel where-in laravel-query-builder

我正在使用 Laravel 5.3 开发 Web 应用程序。我现在遇到 Laravel 查询生成器方法 whereIn 的问题。

我有这样的表。

student - id, name, dob
course - id, code
student_course -  student_id, course_id

我想做的是让学生通过 student_course 表的 course_id 搜索而不加入任何表。在手动查询中,我喜欢这样。

SELECT * FROM `student` WHERE `student`.`id` IN (SELECT `student_id` FROM `student_course` WHRE `course_id`= ?) 

所以现在当我尝试将它转换为 Laravel 查询构建器时,我遇到了问题。这是我的代码:

DB::table('student')->whereIn('id',[ "Here I want to run sub query" ])->get();

正如您在 whereIn() 的第二个参数中所见,我遇到了问题。在这种情况下,我需要运行原始查询吗?如何将原始查询作为第二个参数运行?如果没有,我如何才能像上面那样在一个查询中按 course_id 进行过滤而不加入任何表?

最佳答案

引用这个

 $courseId = 1;

 $data = DB::table('student')->whereIn('id',function($query) use (courseId){
    $query->select('student_id')
            ->from('student_course')->where('course_id', '=',$courseId);
})->get();

关于mysql - 将 Laravel 查询生成器方法 whereIn() 与子查询一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40860232/

相关文章:

mysql - 遍历结果行并将列数据存储到存储过程变量mysql

mysql - 一个字段中的 SQL 数据,以逗号分隔

php - 没有 else 的 Blade 三元运算符

php - 在 PHP 中更改 MySQL 中的记录顺序

php - 如何使用 Mysql If 函数来评估日期时间列?

php - Laravel:helpers.php 第 531 行中的 ErrorException:

php - Laravel 动态更改模式

c# where in with list 和 linq

php - MySQL:如何通过此查询获得更多结果 WHERE IN

mysql - 如何对两个单独的表使用 mysql WHERE IN