我有 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/