【问题标题】:Laravel: retrieving unassigned records from databaseLaravel:从数据库中检索未分配的记录
【发布时间】:2017-05-06 22:29:38
【问题描述】:

我正在使用 Laravel 构建一个简单的考勤监控系统。我有两个相关的表teachers 表和grade_levels 表。

这是两者的表结构

教师表

id(PK)

advisory_class(FK) -> 引用 grade_levels 表上的 id

teacher_name

年级水平表

id(PK)

grade_level

section

我要做的是从grade_levels 表中检索尚未从teachers table 分配给老师的所有记录

我如何用 Laravel 查询这个??

我尝试进行连接查询,但我得到了指定教师的记录。

$teachers = DB::table('teachers') ->join('grade_levels','teachers.advisory_class', '=', 'grade_levels.id') ->select('teachers.*','grade_levels.grade_lvl','grade_levels.section') ->get();

我在这个查询中遗漏了什么吗?

谢谢大家!

【问题讨论】:

  • 您需要leftJoin()whereNull()。或带有子查询的whereNotIn()。如果您正确设置模型关系,doesntHave() 也可能有效。

标签: php mysql database laravel


【解决方案1】:

如果您想从父表 A 中获取在子表 B 中没有匹配项的所有行,查询应如下所示:

SELECT a.*
FROM a
LEFT JOIN b ON b.fk = a.pk
WHERE b.fk IS NULL

所以你的情况是:

$gradeLevels = DB::table('grade_levels')
    ->leftJoin('teachers','teachers.advisory_class', '=', 'grade_levels.id')
    ->whereNull('teachers.advisory_class')
    ->select('grade_levels.*')
    ->get();

请注意,从 teachers 表中选择任何内容都没有任何意义,因为您正在搜索没有指定教师的“年级”。

使用模型,这也可能有效:

$gradeLevels = GradeLevel::whereNotIn('id', Teacher::select(advisory_class))->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2015-07-21
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多