我想显示具有以下多个字符的学生数据(例如:帅气和聪明),如果学生既没有两个字符又没有一个字符,则学生必须同时拥有两个字符,然后不要显示。
我尝试使用此代码,但是所有包含字符(帅气和聪明)的数据都会出现
示例:
$data = DB::table('student')->whereIn('characters', ['handsome','smart'])->get();
答案 0 :(得分:0)
您可以将约束链接到哪里以及查询的add或子句。 orWhere方法接受与where方法相同的参数:
$users = DB::table('student')
->where('characters', 'handsome')
->orWhere('characters', 'smart')
->get();
答案 1 :(得分:0)
针对此要求的有效的原始MySQL查询如下所示:
SELECT s1.*
FROM student s1
INNER JOIN
(
SELECT id
FROM student
WHERE character IN ('handsome', 'smart')
GROUP BY id
HAVING COUNT(DISTINCT character) = 2
) s2
ON s1.id = s2.id;
我们可以尝试编写以下Laravel代码:
$characters = DB::table('student')
->select('id')
->whereIn('characters', ['handsome','smart'])
->groupBy('id')
->havingRaw('COUNT(DISTINCT character) = 2');
$matches = DB::table('student s1')
->joinSub($characters, 's2', function ($join) {
$join->on('s1.id', '=', 's2.id');
})
->get();
此答案假定student
表的主键列称为id
。如果还需要其他名称,请更新我的代码段以使其与之匹配。
答案 2 :(得分:0)
在查询中放入where子句,如下所示:
$student = \DB::table('student')
->whereExists(function ($query) {
$query->orWhere('characters', 'handsome')
->orWhere('characters', 'smart');
})->get();