2016-10-22 3 views
1

このコードは、見つかったデータのfirstのみを示しています。最初のデータのみが表示されます。同じIDのすべてのデータを表示するにはどうすればよいですか?

public function getGroupInfo($eg_id){ 
     $members = \App\EventGroupMembers::where('eg_id', '=', $eg_id)->get(); 
     if ($members->count() > 0) { 
      $user = \App\User::find($members[0]->user_id); 
      echo $user->first_name; 
     } else { 
      return false; 
     } 
    } 

event_group_members

eg_id  user_id 
1   1 
2   2 
2   3 
3   4 
3   5 

user

user_id first_name 
1   tony 
2   steve 
3   bruce 
4   thor 
5   clint 

私は同じeg_idですべてfirst_namesを表示するために何をすべき?

答えて

1

これを試してみてください:

foreach($members as $member) 
{ 
    echo $member->id; 
    // It will echo diff id for each iteration 
} 

説明:$メンバーは、複数の値を持つSTDクラスオブジェクトであるあなたは、この使用している場合:

$members[0]->user_id; 

は、あなたがその0番目のインデックスを参照している意味値。すべての値にアクセスするには、ループを使用する必要があります。

+1

はちょっとそれはIDのみを示すが、名前はしませんでした。そして** echo $ member-> first_name; **を使用すると、何も表示されません。 –

+0

foreach($ members as $ member){ \t \t \t $ user = \ App \ User :: where( 'user_id' '='、$ member-> user_id) - >値( 'first_name'); –

+1

@Noob、このソリューションはN + 1個のクエリを作成し、広告はアプリを終了させます。テーブルに20000人のユーザーがいる場合、アプリケーションは20001のDBクエリを実行します。 https://laravel.com/docs/5.3/eloquent-relationships#eager-loading –

0

あなたはこの

public function getGroupInfo($eg_id){ 
     $userNames = array(); 
     $members = \App\EventGroupMembers::where('eg_id', '=', $eg_id)->get(); 
     if ($members->count() > 0) { 
     foreach($members as $data){ 
     $user = \App\User::where('user_id',$data->user_id)->get(); 

     foreach($user as $userData){ 
     $userNames[] = $userData->first_name; 
     } 
     }   
      } else { 
       return false; 
      } 
     } 

ようにそれを行うことができます。そして、あなたはその配列からユーザー名を取得することができます。

foreach($userNames as $name){ 
echo $name; 
} 
+0

これは、N + 1個のクエリを作成します。テーブルに20000人のユーザーがいる場合、アプリケーションは20001のDBクエリを実行します。 https://laravel.com/docs/5.3/eloquent-relationships#eager-loading –

+0

@AlexeyMezenin情報をありがとうございます。私はそのような操作を次に実行するときにこれを覚えておきます。 –

+0

ありがとうございました:) –

0

あなたはEventGroupMembersモデルでuser_idを持っているので、あなたがすでにone-to-many relationshipEventGroupMembers間とUserモデルを持っているアプリケーションで作業しているようです。したがってforeign keyevent_group_membersテーブル移行と関係をUserモデルにチェックしてください。その後

public function eventGroupMembers() 
{ 
    return $this->belongsTo('App\User'); 
} 

あなたはeg_idEventGroupMembersでモデルによりユーザーをフィルタすることができます。このソリューションは、DBにちょうど2つのクエリを行います

$members = User::with(['eventGroupMembers' => function($q) use ($eg_id) { 
    $q->where('eg_id', $eg_id); 
})->get(); 

は、それからちょうどブレード・テンプレートに、ユーザーの最初の名前をリスト:

@foreach ($members) 
    $member->first_name; 
@endforeach 
+0

ありがとうございました:) –

関連する問題