2
我對Laravel和Eloquent非常陌生,我試圖定義一個數據模型從中獲取記錄。基於複雜關係的查詢模型
我有如下表
- 用戶
- 任務
- USER_ID
- tasks_state
- USER_ID
- TASK_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');
}
}
然後,當我插入一個任務狀態,我這樣做是爲以下幾點:(這是正確的嗎?)
$task_viewed = new TaskState();
$task_viewed->state = $state;
$task_viewed->user_id = $user->id;
$task->tasksState()->save($task_viewed);
現在,我面臨的一個問題,如何獲取所有任務特定用戶不是由他創建的,他沒有與他們交互 - 在tasks_state表或任務狀態== 0沒有記錄。
我也想過,也許模型之間的關係是不正確的?
它不應該有可能做到這一點作爲一個數據庫查詢,而不是兩個?這似乎有點低效... – user3559787
第二個解決方案看起來更像我所尋找的:-)但仍然有一個問題。我現在認爲,我定義模型的方式在tasks_state表的情況下應該是多對多的。你不這麼認爲嗎?它也會促進解決方案嗎?我剛看到一個帶有'pivot'雄辯功能的例子。 – user3559787
我不知道你的數據結構究竟是什麼,所以我不能確定,但它看起來像多對多關係,其中'tasks_state'是一個數據透視表。如果用戶可以與許多任務交互,並且每個任務都有許多用戶,那麼它是多對多的。 –