Php Laravel MySql联接表

Php Laravel MySql联接表,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我正在开发一个laravel 5应用程序。 从两个数据库表中获取结果时出现问题。以下是我所拥有的: table A: 'courses' id | Course ———————————————— 1 | Math 2 | History 3 | Geography 4 | Computer 及表B user_id | classroom_id | course 1 | 5 | 3 1

我正在开发一个laravel 5应用程序。 从两个数据库表中获取结果时出现问题。以下是我所拥有的:

table A: 'courses' 

id   |    Course
————————————————
1    |    Math
2    |    History
3    |    Geography
4    |    Computer
及表B

user_id | classroom_id | course 
1       | 5            | 3
1       | 5            | 4
1       | 6            | 2
我在for-each循环中返回了表A,但我想检查用户_id 1在for-each循环中的每一列上必须返回true或false的过程。 大概是这样的:

为用户\u id 1返回的项目:

id   |    course     |  status
____________________________
1    |    Math       | false
2    |    History    | true
3    |    Geography  | true
4    |    Computer   | true
这是我所拥有的:

$AllList = DB::table('users')
            ->join('courses', 'users.id', '=', 'courses.parent_id')
            ->join('classroom', 'users.id', '=', 'classroom.user_id')->where('classroom_id', '=', 5)       
            ->get();

感谢您的帮助。

只需将
join
替换为
leftJoin

$AllList = DB::table('courses')
            ->select('courses.id','course.name')
            ->leftJoin('users', 'users.id', '=', 'courses.parent_id')
            ->join('classroom', 'users.id', '=', 'classroom.user_id')->where('classroom_id', '=', 5)       
            ->get();

Course
字段将为
NULL
因此,如果不存在匹配项,则为空字符串

只需将
join
替换为
leftJoin

$AllList = DB::table('courses')
            ->select('courses.id','course.name')
            ->leftJoin('users', 'users.id', '=', 'courses.parent_id')
            ->join('classroom', 'users.id', '=', 'classroom.user_id')->where('classroom_id', '=', 5)       
            ->get();

课程
字段将为
因此,如果没有匹配项,则为空字符串

下面的代码行将帮助您

    $getCourse = DB::table('courses')->get(['id','course']);

    $getCourse = collect($getCourse)->map(function($x){ return (array) $x; })->toArray();

    foreach ($getCourse as $key => $value)
    {
        $flag = DB::table('classroom')
                    ->where('user_id',1)
                    ->where('course',$value['id'])
                    ->pluck('id');
        if($flag)
        {
            $getCourse[$key]['status'] = true;
        }
        else
        {
            $getCourse[$key]['status'] = false;
        }
    }

    dd($getCourse);

下面几行代码将帮助您

    $getCourse = DB::table('courses')->get(['id','course']);

    $getCourse = collect($getCourse)->map(function($x){ return (array) $x; })->toArray();

    foreach ($getCourse as $key => $value)
    {
        $flag = DB::table('classroom')
                    ->where('user_id',1)
                    ->where('course',$value['id'])
                    ->pluck('id');
        if($flag)
        {
            $getCourse[$key]['status'] = true;
        }
        else
        {
            $getCourse[$key]['status'] = false;
        }
    }

    dd($getCourse);


左连接应该可以,如果为空则为“false”@ka_lin谢谢你的评论,但是代码应该是什么?到目前为止你有什么?首先你必须创建一个属于关系,然后当你查询“courses”时,只需检查与表b是否有任何关系,然后打印为true或false。请在这里显示你尝试的内容,我们可以通过代码或逻辑
帮助您从A.id=B.couse上的内部连接B中选择课程,其中B.user\u id=1左连接应该可以,如果为空则为“假”@ka_lin谢谢你的评论,但是代码应该是什么?到目前为止你有什么?首先你必须创建一个属于关系,然后当你查询“课程”时,只需检查与表b是否有任何关系,然后打印为真或假。请在这里显示你尝试的内容,我们可以通过代码或逻辑
帮助您从A.id=B.couse上的内部连接B中选择课程,其中B.user\u id=1谢谢你的回答。那么如何限制返回的列呢?因为我在两个表上都有所有的列就像我做的一样酷,谢谢。我只是投票支持你的答案,而不是选择作为被接受的答案来从其他人那里得到更多的答案。再次感谢你没有选择作为答案的原因,因为我的所有数据仍然为空:[{“id”:Null,“name”:Null},{“id”:Null,“name”:Null},{“id”:Null,“name”:Null},{“id”:Null,“name”:Null},{“id”:Null,“name”:Null}]哦,对不起,我将“
课程
替换为
用户
,因为有没有课程的用户,这就是为什么你会得到空值感谢你的回答。那么如何限制返回的列呢?因为我在两个表上都有所有的列就像我做的一样酷,谢谢。我只是投票支持你的答案,而不是选择作为被接受的答案来从其他人那里得到更多的答案。再次感谢为什么没有选择作为答案的原因,因为我仍然为所有数据获取Null:[{“id”:Null,“name”:Null},{“id”:Null,“name”:Null},{“id”:Null,“name”:Null},{“id”:Null,“name”:Null}]哦,对不起,我将“
课程
替换为
用户
,因为有没有课程的用户,这就是为什么您获取空值的原因