Laravel,在 eloquent 查询中搜索完全相同的子字符串
Laravel, search exact same substring in eloquent query
我有一个table这样的
老师Table
我想要做的是获取包含主题 1(或任何其他数字,如 7,8 等)
的行
这是我在我的控制器中尝试过的。
public function allTeachers($sub_id) //receiving $sub_id(to be searched)
{
$teachers_all=Teacher::where('subjects','like','%'.','.$sub_id.'%')->latest()->paginate(50);
dd($teachers_all);
}
这里的问题是,我得到的所有包含主题的行都是“1”,例如如果它是“3,11,22”或“41,5”,它会被选中。
但我想要实现的是它应该只 return 其中主题字符串包含 '1' 后跟 ',' 或 '1,2,44, 31,23'等
我正在使用 laravel,希望我把问题说清楚了。
您问题的解决方案是使用 find_in_set
或 concat
填充一些缺失的逗号,然后搜索值:
Teacher::whereRaw('find_in_set("' . $sub_id . '", subjects) <> 0')
->latest()
->paginate(50);
或
Teacher::whereRaw('concat(",", colors, ",") like "%,' . $sub_id . ',%"')
->latest()
->paginate(50);
也就是说,@bromeer 的评论在任何情况下都是正确的。 MySQL 不围绕字段中的 comma-separated 值。上面显示的两个示例都不是理想的解决方案。你应该多研究一下人际关系。
我建议在您的案例中使用 many-to-many 关系。为此,创建一个名为 teacher_subject
的枢轴 table 并将关系添加到您的 Teacher
模型:
public function subjects()
{
return $this->belongsToMany(Subject::class);
}
要查找教授特定科目的教师,请使用 whereHas
,如下所示:
Teacher::whereHas('subjects', function (Builder $query) use ($sub_id) {
$query->where('id', $sub_id);
})->latest()->paginate(50);
我有一个table这样的
老师Table
我想要做的是获取包含主题 1(或任何其他数字,如 7,8 等)
的行这是我在我的控制器中尝试过的。
public function allTeachers($sub_id) //receiving $sub_id(to be searched)
{
$teachers_all=Teacher::where('subjects','like','%'.','.$sub_id.'%')->latest()->paginate(50);
dd($teachers_all);
}
这里的问题是,我得到的所有包含主题的行都是“1”,例如如果它是“3,11,22”或“41,5”,它会被选中。 但我想要实现的是它应该只 return 其中主题字符串包含 '1' 后跟 ',' 或 '1,2,44, 31,23'等 我正在使用 laravel,希望我把问题说清楚了。
您问题的解决方案是使用 find_in_set
或 concat
填充一些缺失的逗号,然后搜索值:
Teacher::whereRaw('find_in_set("' . $sub_id . '", subjects) <> 0')
->latest()
->paginate(50);
或
Teacher::whereRaw('concat(",", colors, ",") like "%,' . $sub_id . ',%"')
->latest()
->paginate(50);
也就是说,@bromeer 的评论在任何情况下都是正确的。 MySQL 不围绕字段中的 comma-separated 值。上面显示的两个示例都不是理想的解决方案。你应该多研究一下人际关系。
我建议在您的案例中使用 many-to-many 关系。为此,创建一个名为 teacher_subject
的枢轴 table 并将关系添加到您的 Teacher
模型:
public function subjects()
{
return $this->belongsToMany(Subject::class);
}
要查找教授特定科目的教师,请使用 whereHas
,如下所示:
Teacher::whereHas('subjects', function (Builder $query) use ($sub_id) {
$query->where('id', $sub_id);
})->latest()->paginate(50);