Skills
-------
id name
1 PHP
2 Laravel
Qualifications
-----------------
id name
1 MBA
2 Graduate
3 Post Graduate
students
------------
id name
1 John
2 Smith
2 pivot tables
student_skills
student_id skill_id
1 1
1 2
2 1
student_qualifications
tutor_id qualification_id
1 2
1 2
2 2
在前端,用户可以根据我们显示数据所需的选项选择多个资格(复选框)和技能(复选框)。
例如:如何让具有毕业证书和MBA技能的学生以及Laravel和PHP技能
答案 0 :(得分:1)
以下是一个关于如何做到这一点的示例(由于您的问题中缺少详细信息,它可能不准确,但它应该给您一个想法)
(我认为你最好使用Mutli-select框而不是复选框来获得技能和资格)
假设您想按技能搜索学生&合格 而且你的模型中有正确的关系方法
//Don't forget to import Students model at top of the controller
public function whatever(Request $request)
{
$data = Student::with('qualifications', 'skills');
// assuming that the form will pass an array of skills names
//if the form passes an array of ID's of skills it becomes easier
if (!empty($request->skills)) {
foreach ($request->skills as $skill) {
$data->whereHas('skills', function ($query) use ($skill) {
$query->where('id', $skill);
})->get();
}
}
// same goes for qualifications
if (!empty($request->qualifications)) {
foreach ($request->qualifications as $qualification) {
$data->whereHas('qualifications', function ($query) use ($skill) {
$query->where('id', $qualification);
})->get();
}
}
// execute the query now
$data->get(); // or pagniate(10)
}
如果您传递的是ID'而不是名称
if (!empty($request->skills)) {
$data->whereHas('skills', function ($query) use ($skills) {
$query->whereIn('id', $skills);
})->get();
}
同样适用于资格。
我希望你明白这一点,你可以排序和填充,这可能不是你需要的确切的东西,但如果你得到它会帮助你很多。