我是Laravel和Eloquent的新手,我正在尝试定义一个数据模型,从中获取记录。
我有以下表格
基本上每个用户可以创建多个任务,每个任务只属于一个用户。然后,每个任务可以为与其交互的每个用户具有多个任务状态。 (像查看(由其他用户查看)或类似的任务)
我将模型定义如下:
用户模型:
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');
}
}
然后,当我插入任务状态时,我按以下方式执行:(这是正确的吗?)
$task_viewed = new TaskState();
$task_viewed->state = $state;
$task_viewed->user_id = $user->id;
$task->tasksState()->save($task_viewed);
现在,我正面临一个问题,如何获取未由他创建的特定用户的所有任务,并且他没有与他们交互 - 在tasks_state表中没有记录或任务状态== 0。
我也在想,模型之间的关系可能不正确吗?
答案 0 :(得分:1)
您可以使用whereDoesntHave()
方法执行此操作:
$tasks = Task::where('user_id', '<>', $userId)
->whereDoesntHave('tasksState', function($q) use($userId) {
$q->where('user_id', $userId)->where('state', 0);
})->get();