【问题标题】:Query in finding the data within the row查询在行内查找数据
【发布时间】:2021-12-29 07:38:47
【问题描述】:

我需要写一个查询, 科目表

1. Id=1  name= subject 1, teacher_id = 1, course_id = 1,;
2. Id=1  name= subject 2, teacher_id = 2, course_id = 3;
3. Id=1  name= subject 3, teacher_id = 3, course_id = 4 
4. Id=1  name= subject 3, teacher_id = 4, course_id = 5 ;(exclude)

我有一个包含 student_id、course_id 和teacher_id 的student_exclusion 表。此模型适用于学生不希望看到teacher_id 和course_id 为这些科目的科目,

student_id = 1, teacher_id = 3,course_id=4
student_id = 1, teacher_id = 4,course_id=5
student_id = 2, teacher_id = 3,course_id=5

我需要显示除 3 和 4 之外的所有科目(这意味着我需要显示teacher_id!=Student_exclusion.teacher_id 和 course_id!=student_exclusion.course_id 的科目)。我该如何编写查询?我可以从这里获取teacher_id 和 course_id,但我需要检查特定的行。我想要做的就是从 student_exclusion 表中获取所有的teacher_id 和 course_id,然后从主题模型中获取所有的主题(获取teacher_id 和 course_id 的所有主题!= studentExcludedCourseTeacher)。就像,学生在中添加教师课程ID(我不想看到课程= 1和教师= 1的科目)。 (从一行)

$studentExcludedCourseTeacher= StudentExclusion::where('user_id', auth()->user()->id)->get('teacher_id', 'course_id');
$subjectList = Subject::->where(function ($query) use ($studentExcludedCourseTeacher) {
??               
);
 })->get();

【问题讨论】:

  • 主题细节从何而来?
  • 由管理员前端@AnkitSharma 手动添加我无法编辑帖子,但名称=subject1,subject2 subbject3
  • 您要先通过student_id列将第二个表与第一个表连接起来吗?
  • @NabinaKhadka 点击标签下方的编辑按钮
  • 从哪张桌子上买票?您的第一个表格用于科目,第二个表格用于 student_exclusion。您能否给出一个您期望的示例输出?

标签: laravel eloquent model


【解决方案1】:
  1. 获取所有主题。
  2. 获取所有学生排除。
  3. 过滤主题,使学生排除没有任何条目一次属于teacher_id和course_id的每个条目。
$subjects = Subject::all();

$studentExclusion = StudentExclusion::all();

$result = $subjects->filter(function($item) use ($studentExclusion) {
    $data = $studentExclusion->where("teacher_id", $item->teacher_id)->where("course_id", $item->course_id)->count() ?? 0;

    if($data == 0) return $item;
});

return $result;

在本地构建您的数据集:

$subjects = collect([
            [
                "name"  => "subject 1",
                "teacher_id" => 1,
                "course_id" => 1
            ], [
                "name"  => "subject 2",
                "teacher_id" => 2,
                "course_id" => 3
            ], [
                "name"  => "subject 3",
                "teacher_id" => 3,
                "course_id" => 4
            ], [
                "name"  => "subject 3",
                "teacher_id" => 4,
                "course_id" => 5
            ]
        ]);

        $studentExclusion = collect([
            [
                "student_id" => 1,
                "teacher_id" => 3,
                "course_id"  => 4
            ], [
                "student_id" => 1,
                "teacher_id" => 4,
                "course_id"  => 5
            ], [
                "student_id" => 2,
                "teacher_id" => 3,
                "course_id"  => 5
            ],
        ]);

        $result = $subjects->filter(function($item) use ($studentExclusion) {
            $data = $studentExclusion->where("teacher_id", $item["teacher_id"])->where("course_id", $item["course_id"])->count() ?? 0;

            if($data == 0) return $item;
        });

        return $result->pluck("name");

输出:

[
    "subject 1",
    "subject 2"
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多