Php Laravel MySql联接表
我正在开发一个laravel 5应用程序。 从两个数据库表中获取结果时出现问题。以下是我所拥有的: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
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}]哦,对不起,我将“课程
替换为用户
,因为有没有课程的用户,这就是为什么您获取空值的原因