1

次のdbテーブルをセットアップしました

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

関連するデータベースへの外部キーを持つ関係テーブル [b]user_clients[/b] を設定したので、userid は users->id にリンクされ、clientid は client->id にリンクされます。

リンクされているクライアントの数は、Users Authid に依存します。

Authid 1: ユーザーは、関連付けられたクライアントを 1 つだけ持つことができます。

Authid 2: ユーザーは 1 つから複数のクライアントのみを関連付けることができます

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;
  }
4

1 に答える 1

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;

user_idまたはなどの ID にはスネーク ケースを使用することをお勧めしますclient_id

テーブル名は複数形にする必要があります。usersclients

ピボット テーブルは、アルファベット順で単数形の snake_case である必要があります。 client_user.

これにより、関係を設定するときに心配する必要が少なくなり、他の誰かがプロジェクトでの作業を支援しやすくなるため、Eloquent での作業がはるかに簡単になります。

return $this->belongsToMany('Client','user_clients','userid','clientid');あなたがしなければならないすべての代わりにreturn $this->belongsToMany('Client');、アプリをよりクリーンで読みやすく保つ必要があります.

于 2013-07-15T17:36:26.940 に答える