2016-05-25 15 views
2

私はLaravelを初めて使い、MariaDB 10.0.xxでLaravel 5.2を学びました。Laravel 5.2メンバーリストを同じ行に表示するにはどうすればいいですか?(1対多(または多対多))データ表示

いくつかのテーブルがありますが、「メンバー」には「グループ」が多数あり、メンバーの名前と姓を同じ行にすでに参加しているグループの名前で表示したいと考えています。

これを達成するための明確なアイデアはありませんが、私は2つの別個のクエリ($ memberListsと$ groupLists)を作成し、最初のクエリ($ memberLists)を入力してグループリストを取得しますプライマリキーから2番目のクエリ($ groupLists)。

あなたが良いアイデアを持っている場合は、私にお知らせください。

私のコントローラ

$memberLists = DB::table('Member') 
       ->select('firstNm','lastNm') 
       ->join('Center', 'Member.mbrCd', '=', 'Center.mbrCd') 
       ->join('Org', 'Center.orgCd', '=', 'Org.orgCd'); 

$groupLists = DB::table('Group') 
       ->select('groupNm') 
       ->join('Center','Center.orgCd','=','Group.orgCd') 
       ->join('GroupMember ','GroupMember.mbrCd','=','Center.mbrCd') 
       ->where ('GroupMember.mbrCd',$Member_primaryKey_from_memberLists); 

view return view('member.memberList') 
       ->with('memberLists', $memberLists) 
       ->with('groupLists',$groupLists); 

これはまあ

@extends('masterLayOut') 

<table> 
<thead> 
<th> First Name </th> 
<th> Last Name </th> 
<th> Groups </th> 
</thead> 
<tbody> 

@foreach ($memberLists as $memberList) 
<tr> 
<td> {{ memberList->firstNm}}</td> 
<td> {{ memberList->lastNm }}</td> 
<td> {{ groupLists->groupNm }} </td> 
</tr> 
@endforeach 

</tbody> 
<table> 

答えて

0

私の見解である

first Name/Last Name/Groups 
john   Doe   A group, B group 
Jane   Taylor  B group 
Nick   Kay   A group, B group, C group 

次のように私が表示したいですこれは、クエリーの代わりにEloquentモデルを使用するのが良い理由の例です。あなたは熱心な読み込みでこれを解決することができました。あなたの例では

あなたが最初にすべてのグループのすべてのものがあるでしょう(私は省略しますすべての私たちがここでそれを必要とする場合、私は知らないbesause合流):

コントローラ

//I'm selecting also member id (I don't know how you call it) 
$memberLists = DB::table('Member') 
    ->select('id', 'firstNm','lastNm') 
    ->get(); 


$groupLists = DB::table('Group') 
    ->select('groupNm', 'mbrCd') 
    ->get(); 

$groups = []; 

foreach($groupLists as $group) { 
    if (!isset($group[$group->mbrCd])) { 
     $group[$group->mbrCd] = []; 
    } 
    $group[$group->mbrCd][] = $group->groupNm; 
} 

return view('member.memberList') 
    ->with('memberLists', $memberLists) 
    ->with('groupLists', $groups); 

あなたの意見で:

@extends('masterLayOut') 

<table> 
<thead> 
<th> First Name </th> 
<th> Last Name </th> 
<th> Groups </th> 
</thead> 
<tbody> 

@foreach ($memberLists as $memberList) 
    <tr> 
     <td> {{ memberList->firstNm}}</td> 
     <td> {{ memberList->lastNm }}</td> 
     <td> {{ isset($groups[$memberList->id]) ? implode(', ', $groups[$memberList->id]) : '' }} </td> 
    </tr> 
@foreach 

</tbody> 
<table> 
+1

これは正しく表示されません。 '$ memberList-> id'は、決して存在しない' $ groups'配列のインデックスでもあると仮定しています。 – Gravy

+0

いいえあなたは正しいです。私はそれを編集するでしょう –

+0

それはメンバーとグループの間に1対多数の関係のようには見えません。メンバー(mbrCdを持つ)は単一のグループしか持たないようです。あなたの意見を教えてください。 –

関連する問題