Laravel 基于复杂关系的查询模型

Laravel 基于复杂关系的查询模型,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我对Laravel很陌生,而且口才很好,我正在尝试定义一个数据模型,从中获取记录 我有以下几张表 用户 任务 用户id 任务\u状态 用户id 任务id 陈述 基本上每个用户都可以创建多个任务,每个任务只属于一个用户。然后,每个任务可以为与其交互的每个用户具有多个任务状态。(类似于(其他用户)查看的任务或类似任务) 我对模型的定义如下: 用户型号: class User extends Model { public function tasksState(){

我对Laravel很陌生,而且口才很好,我正在尝试定义一个数据模型,从中获取记录

我有以下几张表

  • 用户
  • 任务
    • 用户id
  • 任务\u状态
    • 用户id
    • 任务id
    • 陈述
基本上每个用户都可以创建多个任务,每个任务只属于一个用户。然后,每个任务可以为与其交互的每个用户具有多个任务状态。(类似于(其他用户)查看的任务或类似任务)

我对模型的定义如下:

用户型号:

class User extends Model {
    public function tasksState(){
        return $this->hasMany('App\TaskState');
    }
    public function tasks(){
        return $this->hasMany('App\Task');
    }
}
任务模型

class Task extends Model {
    public function user(){
        return $this->belongsTo('App\User');
    }
    public function tasksState(){
        return $this->hasMany('App\TaskState');
    }
}
class TaskState extends Model {
    public function user(){
        return $this->belongsTo('App\User');
    }
    public function task(){
        return $this->belongsTo('App\Task');
    }
}
任务状态模型

class Task extends Model {
    public function user(){
        return $this->belongsTo('App\User');
    }
    public function tasksState(){
        return $this->hasMany('App\TaskState');
    }
}
class TaskState extends Model {
    public function user(){
        return $this->belongsTo('App\User');
    }
    public function task(){
        return $this->belongsTo('App\Task');
    }
}
然后,当我插入一个任务状态时,我按如下方式执行:(这是正确的吗?)

现在,我面临一个问题,如何获取特定用户的所有任务,这些任务不是由他创建的,而且他也没有与之交互——任务状态表中没有记录,或者任务状态==0

我还认为可能模型之间的关系不正确?

您可以使用以下方法:

$tasks=Task::where('user\u id','',$userId)
->其中没有('tasksState',函数($q)使用($userId){
$q->where('user\u id',$userId)->where('state',0);
})->get();

是否可以作为一个数据库查询而不是两个数据库查询?它似乎有点低效……我不知道您的数据结构到底是什么,所以我不能确定,但它看起来像是多对多关系,其中
tasks\u state
是一个透视表。如果用户可以与多个任务交互,并且每个任务都有多个用户,那么这就是多对多。由于“或任务状态==0”,您应该在闭包中添加条件
->where('state','',0)
。我们刚刚回来接受您的答案:-)它正在按预期工作!非常感谢。@user3559787,感谢您的反馈,我已经修复了代码。