2014-01-26 56 views
0
users 
id 
email 
password 
created_at 
updated_at 

tasks 
id 
name 
created_at 
updated_at 

應創建一個數據透視表(users_tasks),或者只是把tasks表內的user_id場?我想使用Eloquent驅動程序,但我不確定哪種方法最適合這種類型的關係...Laravel 4:透視表,或ID

多對多關係是一種更復雜的關係類型。這種關係的一個例子是具有許多角色的用戶,其中 角色也由其他用戶共享。例如,許多用戶可能具有「管理員」的角色 。

從Laravel文檔上報價,按理說,在這種情況下,沒有必要對數據透視表...因爲每個task僅由單一的國有user ......是的正確的思維方式?

回答

2

正確的,如果每個任務只曾經由單個用戶,然後添加一個user_id列到任務表擁有的將是最簡單的選項,並且關係將在模型類似設置:

class User extends Eloquent { 

    public function tasks() 
    { 
     return $this->hasMany('Task'); 
    } 

} 

class Task extends Eloquent { 

    public function user() 
    { 
     return $this->belongsTo('User'); 
    } 

} 

編輯

如果您計劃在任何階段允許多個用戶訪問任務,例如,如果您希望所有者能夠將任務分配給其他人,那麼您最好使用數據透視表。您可以稍後添加一個,但如果這是該計劃,則可能更乾淨。除了提供關係之外,數據透視表還可以包括用戶的狀態/訪問細節。然後,您可以添加一個task_user表,是這樣的:

task_user 
    -task_id 
    -user_id 
    -status_id 

與STATUS_ID,表示用戶是所有者或項目已分配給他們。然後,您將更改User model tasks方法以返回$ this-> hasMany關係。

如果您要添加的數據不僅僅是任務和用戶ID,還需要在關係定義中包含數據透視表字段詳細信息。

return $this->belongsToMany('Task')->withPivot('status_id'); 

看到http://laravel.com/docs/eloquent#working-with-pivot-tables

+0

感謝您的回答!我很好奇......假設我想允許用戶與其他用戶「分享」任務......數據透視表是否會發揮作用? – dcolumbus

+0

看到我的編輯的一些額外的細節回覆此 – glendaviesnz