【问题标题】:laravel query problem using join, what is missing?laravel 使用 join 查询问题,缺少什么?
【发布时间】:2021-05-12 14:04:09
【问题描述】:

首先,我不擅长英语,而且我刚开始使用 laravel 框架。我为论文目的开发了一些学校网站。而且我认为这可能是我学习 laravel 的一个机会,因为许多开发人员都推荐 laravel。

回到我的问题嘿嘿

这个查询运行正确。

$questions = DB::table('questions')
                            ->select('questions.id','questions.role','questions.postBody', 'questions.classCode', 'questions.postedById', 'questions.created_at', 'classroom.classroomName','classroom.icon','users.picture', 'students.firstName', 'students.middleName', 'students.lastName', 'students.suffix','students.studentNumber')
                            ->join('classroom', 'classroom.classCode', '=', 'questions.classCode')
                            ->join('users', 'users.id', '=', 'questions.postedById')
                            ->join('students', 'students.email' , '=', 'users.email')
                            ->orderBy('questions.created_at', 'DESC')
                            ->skip($request->page - 5)
                            ->take($request->page)
                            ->get();

当我添加其他表(“老师”)时,我没有得到任何回报。这是我的查询尝试加入“教师”表的示例,在这里,我试图选择教师的电子邮件

 $questions = DB::table('questions')
                            ->select('questions.id','questions.role','questions.postBody', 'questions.classCode', 'questions.postedById', 'questions.created_at', 'classroom.classroomName','classroom.icon','users.picture', 'students.firstName', 'students.middleName', 'students.lastName', 'students.suffix','students.studentNumber','teacher.email')
                            ->join('classroom', 'classroom.classCode', '=', 'questions.classCode')
                            ->join('users', 'users.id', '=', 'questions.postedById')
                            ->join('students', 'students.email' , '=', 'users.email')
                            ->join('teacher', 'teacher.email' , '=', 'users.email')
                            ->orderBy('questions.created_at', 'DESC')
                            ->skip($request->page - 5)
                            ->take($request->page)
                            ->get();

抱歉我的英语不好。

谁能帮帮我?非常感谢!

【问题讨论】:

  • 您确定表的名称是teacher 而不是teachers
  • @Aless55,是的,我确定。
  • 是否有可能没有内连接的结果?您确定有一个用户电子邮件也是教师电子邮件吗?
  • 您确定要使用内连接而不是左连接吗?
  • @Aless55,如果我要使用左连接。我如何从中选择字段。和join的方法一样吗?你能给我举个例子吗?

标签: php laravel


【解决方案1】:

问题在于,在您第一次内部加入后,只剩下同时也是学生的用户。因为内部连接正在使用连接表的切割集:

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

在下一个内部连接中,您尝试获取学生和教师表中的电子邮件地址的切割集。这可能永远是空的。 我建议您查找 DB 连接,我会为您的用例使用 leftJoin

->leftJoin('students', 'students.email' , '=', 'users.email')
->leftJoin('teacher', 'teacher.email' , '=', 'users.email')

以下是有关该主题的一些很好的答案: What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?

【讨论】:

  • 哦,有道理。但是你能告诉我如何从不同的表格中选择那封电子邮件吗?
  • 选择应该像您的代码teacher.email中一样工作,或者您要选择什么?
  • 例如我想选择他们的两个电子邮件。这可能吗?
  • 不,您可以使用selectRaw('teacher.firstname as teacher_firstname, techer.lastname as teacher_lastname') 代替选择,在其中使用as 重命名属性。
  • 非常非常非常感谢!!!!它完美地工作。幸好你注意到了我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 2019-03-29
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多