首页 > 解决方案 > 如何使用 Laravel 模型从另一个表中不存在 id 的表中选择记录?

问题描述

项目清单

我需要从 id 不存在于另一个表中的表中选择数据,或者如果存在则检查其他条件。我可以通过

Task::join('events','events.task_id' ,'=','tasks.id')
        ->where('events.event_type','=','Task')
        ->where('events.task_stage','!=','assigned')->select('tasks.*');

但我认为这不是正确的方法。

例如:

+-------------------------+   +-------------------------+
| tasks                   |   | Events                  |
+----------+--------------+   +-------------------------+
| id       |  name        |   | task_id  |  task_stage  |
| 1        |  Task1       |   | 1        |  'assigned'   |
| 2        |  Task2       |   | 2        |  'created'   |
+----------+--------------+    +----------+--------------+

结果应该是:

id 为 2 的任务仅创建未分配。我是新来的查询。提前致谢...

标签: mysqllaravellaravel-query-builder

解决方案


Closure将 a作为第二个参数传递给join方法。将Closure收到一个JoinClause对象,该对象允许您在join子句上指定约束:

Task::join('events', function ($join) {
    $join->on('events.task_id', '=', 'tasks.id')
        ->where('events.event_type', '=', 'Task')
        ->where('events.task_stage', '!=', 'assigned');
})->select('tasks.*')->get();

文档


推荐阅读