sql - Laravel/ Eloquent : querying a belongsTo/hasMany relation

标签 sql laravel-5 eloquent

我有 2 个表:任务执行。一个任务“有许多”执行(和一个执行“属于”一个任务)。

tasks 表中的字段:id(主键)、name、data、created_at、...
executions 表中的字段:id(主键)、process_name、created_at、task_id。

我想获取最早的任务(基于tasks.created_at),
- 从未执行过(executions 表中没有任务 ID 为 task_id 的记录),

- 已被除“MyProcess”之外的任何其他进程执行 => executions.process_name <> 'MyProcess'

我阅读了 Eloquent 文档并找到了“查询关系存在”,但我找不到如何查询不存在的方法。

我该怎么做(我希望我足够清楚)? 非常感谢您,我被卡住了!

最佳答案

首先你应该建立你的关系:

class Task extends Model {
    public function executions() {
        return $this->hasMany(Execution::class);
    }
}

class Execution extends Model {
    public function task() {
        return $this->belongsTo(Task::class);
    }
}

那么你的查询应该是:

$task = Task::doesntHave('executions')
            ->orWhereHas('executions', function($query) use ($name) {
                return $query->where('process_name', '<>', $name);
            })
            ->oldest()
            ->first();

当然,您可以将这些查询包装在查询范围内。

关于sql - Laravel/ Eloquent : querying a belongsTo/hasMany relation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32767672/

相关文章:

sql - 从与单个表相关的许多规范化表中获取所有信息

c# - 在 SQL 数据库和 EF6 中保存标志枚举。这可能吗?

php - 使用多对多关系 Laravel/Eloquent/查询构建器时如何从另一个表获取所有书籍

javascript - 如何在 Laravel 5 的页面上按当前表格打印数据?

Laravel 5.1 Eloquent 地尝试插入数据库而不是更新

mysql - 从 SQL 结果中删除重复项并显示其他列

php - 我可以排除复杂查询中满足条件的行吗? (组合 WHERE + 多重 AND)

php - 返回 Laravel 中的父模型列

javascript - 在 JavaScript 中检索 Eloquent 模型函数

mysql - Laravel - 与父级在同一张表上的一对多