2017-12-20 14 views
0

参加し、名前Laravel雄弁な関係、3の方法は、私は(ここでは単純化)3つのテーブル</p> <p><strong>ユーザー</strong></p> <p>ID、名前、電子メール</p> <p><strong>チーム</strong></p> <p>IDをお持ち

チームメンバー

TEAM_IDは、私はそのチームでもあるすべてのチームにIdが属するユーザー、およびどのような他のメンバーを返すためにAPIクエリを送信したい

をUSER_ID。 userIdだけを返すのではなく、名前と電子メールなどの実際のユーザーデータで配列を埋めたいと思っています。

Route::get('/user/{id}/teams/', '[email protected]');

User.php(モデル)

class User extends Authenticatable 
{ 
    use HasApiTokens, Notifiable; 

    public function teams() 
    { 
     return $this->belongsToMany('App\Team', 'team_user', 'team_id', 'user_id'); 
    } 
} 

Team.php(モデル)

class Team extends Model 
{  
    public function users() 
    { 
     return $this->belongsToMany('App\User', 'team_user', 'team_id', 'user_id'); 
    } 
} 

TeamUser.php(モデル)

class TeamMember extends Model 
{  
    public function user() 
    { 
     return $this->hasOne('App\User'); 
    } 

    public function team() 
    { 
     return $this->hasOne('App\Team'); 
    } 
} 

UserControllerで。 PHP

class UserController extends Controller 
{ 
    public function getTeams($userId) { 

     return User::find($teamId)->teams()->get(); 
    } 
} 

これが返されます。

[ 
    { 
     "id": 6, 
     "name": "P12", 
     "location": "Newbury", 
     "owner": 6, 
     "active": 1, 
     "created_at": "2017-12-20 10:18:00", 
     "updated_at": "2017-12-20 10:18:00", 
     "pivot": { 
      "team_id": 6, 
      "user_id": 6 
     } 
    }, 
    { 
     "id": 4, 
     "name": "fwffewfffffff", 
     "location": "ffffffff", 
     "owner": 4, 
     "active": 1, 
     "created_at": "2017-12-19 19:56:27", 
     "updated_at": "2017-12-19 19:56:27", 
     "pivot": { 
      "team_id": 6, 
      "user_id": 4 
     } 
    } 
] 

を、私はまた、これらの2つのチームのそれぞれに、他のユーザのリストを含めるしたいと思いますが。 user_idsだけでなく、(usersテーブルの)名前と電子メールを使用します。

さらに別のクエリを実行しなくても可能ですか?

+0

を(https://でlaravel.com/docs/5.5/eloquent-relationships#many-to-many)Laravel docs。まず、 'User.php'と' Team.php'(あなたは両方とも 'belongsToMany'でなければなりません)で、' team_members'を2番目の引数として 'User.php'と' Team.php'に追加してください。 [This](http://laraveldaily.com/pivot-tables-and-many-to-many-relationships/)の記事も役立ちます。 – mij

答えて

1

リレーションを読み込んでモデルにアタッチすることができます。

ドット表記teams.usersを使用すると、出力には、IDが$userIdのユーザーにアタッチされているすべてのチームのすべてのユーザーが含まれます。

findOrFailを追加して、ユーザーが見つからない場合に404​​を返すようにしました。

class UserController extends Controller 
{ 
    public function getTeams($userId)  
    { 
     return User::with('teams.users')->findOrFail($userId); 
    } 
} 

これは、ユーザーを返し、関係を添付します。

あなただけのチームを返すようにしたい場合は、あなたがこのような何か行うことができます:あなたがまだの場合は、[多対多]を見てみ

class UserController extends Controller 
{ 
    public function getTeams($userId)  
    { 
     $user = User::with('teams.users')->findOrFail($userId); 

     // $user->teams will hold a collection of teams with their users 
     return $user->teams; 
    } 
} 
+0

ありがとうございました! – Titan

0

例えば

class UserController extends Controller { 
    public function getTeams($userId) { 
     return User::find($userId)->with('teams')->get(); 
     // return User::find($userId)->teams()->get(); 
    } 
} 

あなたはteam_membersデータベースから特定の列を選択したい場合、あなたは一例

ため、 with内の機能を追加することができ、異なるテーブルからフィールドを取得するために with()を使用してみてください
class UserController extends Controller { 
    public function getTeams($userId) { 
     return User::find($userId)->with(['teams' => function($query) { 
      $query->select('id', 'name'); 
     }])->get(); 
    } 
} 
+0

残念ながら、ユーザーのデータはteam_membersには存在せず、user_idsとteam_idsのリストのみが存在します。ユーザー名はユーザーテーブルに属します – Titan

+0

元の質問が更新されました。データが返されました – Titan

+0

user_team_idを取得してTeamsテーブルのクエリに使用できます。 'return Teams :: where( 'id'、$ user_team_id) - > with ( 'users') - > get(); ' –

0

は、今の私は

でこれを解決しました
関連する問題

 関連する問題