Laravel 5.2如何在同一行显示成员列表与他/她的组(一对多(或多对多)数据显示)

时间:2016-05-25 05:09:55

标签: php mysql laravel laravel-5 laravel-5.2

我是Laravel的新手,使用MariaDB 10.0.xx学习Laravel 5.2。

有几个表,但简而言之,'会员'可以有很多'组',我想显示会员的名字和姓氏,其成员已经加入同一行。

我没有任何明确的想法来实现这一点,但我想要做的是创建两个单独的查询($ memberLists和$ groupLists)并通过输入第一个查询($ memberLists)的主要来获取组列表第二个查询的键($ groupLists)。

或者如果您有更好的想法,请告诉我。

我希望显示如下

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

我的控制器

$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>

1 个答案:

答案 0 :(得分:0)

这就是为什么使用Eloquent模型而不是查询的好处。您可以通过急切加载解决这个问题。

在您的示例中,您首先要对所有内容进行分组(因为我不知道我们是否需要它,所以我将省略所有联接):

<强>控制器

//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>