2013-07-15 27 views
1

內此分貝結構/關係我有以下分貝表設置Laravel 4:一種更好的方式來表示laravel

+--------------+ +--------------+ +-----------------------+ 
    | users  | | clients |  | user_clients  | 
    +--------------+ +--------------+  +----------------------+ 
    | id   | | id   |  |  usersid   | 
    | name  | | name  |  |  clientid  | 
    | authid  | | email  |  +----------------------+ 
    | (plus)  | | (plus)  |  
    +-------------+  +-------------+ 

我已經設置了一個關係表並[b] user_clients [/ B]與外鍵到相關的數據庫,所以userid是鏈接到users-> id和clientid鏈接到clients-> id。

依賴於用戶驗證ID是很多客戶的鏈接方式:

AUTHID 1:用戶只能有一個客戶端與之關聯。

AUTHID 2:用戶只能有一個與之關聯的

AUTHID 3的許多客戶:用戶有權訪問的所有客戶端。

所以當我是新來laravel的這種關係方面目前我會做查詢得到一些細節例如很多:

我會做這樣的:

$userClient =UsersClients::select('clientid')->where('userid','=',$userid)->get(); 

然後我可能會循環查看結果,然後獲取每個客戶端詳細信息並輸出到頁面。

foreach($userClient as $i ->$cleint){ 
    echo '<div>' .$cleint->name . '</div>'; 
    ........ 
} 

這會是一個古老的方式可以把它處理好?

----------------編輯---------------

我設法將其排序如下所示:

用戶模型:

public function clients() { 
     return $this->hasMany('UsersClients','userid'); 
    } 

用戶控制器

$selectedUserClients = User::find(24)->clients; 

我得到同樣的出落得如我以前的結果,作爲客戶端ID的1 & 2,但現在如何從實際的客戶端數據庫客戶端的細節基本上是有更簡單的方式,執行以下操作:

foreach ($selectedUserClients as $key => $client) { 
    $clientInfo = Client::select('id','clientname')->where('id','=',$client->clientid)->get(); 
    echo $clientInfo[0]->clientname; 
    } 
+0

多個用戶可以屬於同一個客戶端嗎? – user1669496

+0

是啊!對不起,客戶端可以有一個到很多的用戶以及用戶可以有一個或多個客戶端或所有依賴於身份驗證編號 –

回答

1

的users_clients表需要它自己的ID列,以便許多一對多的關係上班。

在您的用戶模型,嘗試

public function clients() 
{ 
    return $this->belongsToMany('Client','user_clients','userid','clientid'); 
} 

現在,你可以找到分配給每個用戶與 User::find(24)->clients客戶。

您也可以在您的客戶端模型上做相反的事情......

public function users() 
{ 
    return $this->belongsToMany('User','user_clients','clientid','userid'); 
} 

這將讓你找到所有屬於每個客戶 Client::find(42)->users;

的用戶我也想提一提,它是最好的做法是使用蛇的情況下爲您的ID,如user_idclient_id

你的表名應該是複數。 usersclients

您的數據透視表應該是snake_case,按字母順序,單數。 client_user

這樣可以更輕鬆地使用Eloquent,因爲它不需要擔心建立關係時可能會更容易讓其他人幫助您處理項目。

而不是return $this->belongsToMany('Client','user_clients','userid','clientid');所有你需要做的是return $this->belongsToMany('Client');這應該讓你的應用程序更清潔,更容易閱讀。

+0

thansk這個我會看看這個和反饋 –

+0

再次感謝,當你談論最後的聲明返回$這 - > belongsToMany( '客戶');那麼這將如何確定如何使用數據透視表,我想用你提到的命名會創建它自己的結論,即它在用戶模型中,並且希望客戶端因此客戶端用戶的關係自動下降? –

+0

非常感謝這個嘗試了,除了數據透視表需要命名單數client_user,工作,謝謝你爲我節省了一些額外的工作,並學習了更多的東西 –