Показать результат соединения таблицы - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть существующая регистрация в моем проекте Laravel, в которой участники присоединяются к их рангу

У меня есть таблица ранжирования и таблица сведений о членах.в разделе Сведения о членах поле Ранг является идентификатором таблицы ранжирования.

В приведенном ниже коде у меня есть базовое объединение для страницы MembersController @ index, которое отлично работает.

Однако я не могу заставить объединение работать на странице MembersController @ show.как Ранг, чтобы показать здесь, так как мне нужно будет использовать, чтобы иметь возможность редактировать этот ранг, поскольку член продвигается через ранги.

HTML-страница (MemberController @ show)

@section('content')
 <div class="container-fluid">

    <div class="row">
        <div class = "col-sm-12">
            <div class = "card">
                <div class="card-header card-header-icon card-header-rose">
                    <h4 class="card-title font-weight-bold">Member Details</h4>
                </div>
                <div class="card-body">
                    <table class="table">
                        <tr>
                            <th>First Name:</th>
                            <td style="border-top: 1px #ddd solid">{{$member->first_name}}</td>
                            <th>Last Name:</th>
                            <td style="border-top: 1px #ddd solid">{{$member->last_name}}</td>
                            <th>Rank:</th>
                            <td style="border-top: 1px #ddd solid">{{$member->rank}}</td>
                        </tr>
                        <tr>
                            <th>Age:</th>
                            <td>{{$member->age}} years</td>
                            <th>Date of Joining:</th>
                            <td>{{date("d/m/Y",strtotime($member->date_joined))}}</td>
                            <th>Service:</td>
                            <td>{{number_format((float)$member->service,2)}} years</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
    </div>

HTML-страница (MembersController @ Index)

@section('content')
<div class="container-fluid">
    <div class="row">
        <div class="col-sm-12">
            <div class="card">
                <div class="card-header card-header-icon card-header-rose">
                    <h4 class="card-title text-center">Members</h4>
                </div>
                <div class="card-body">
                    <div class="pull-right new-button">
                        <a href="{{action('MembersController@create')}}" class="btn btn-primary" title="Add Member"><i
                                    class="fa fa-plus fa-2x"></i> Add Member</a>
                    </div>

                    <div class="table-responsive">
                        <table class="table">
                            <thead class="text-primary">
                            <th></th>
                            <th class="text-center">Membership Number</th>
                            <th class="text-center">Name</th>
                            <th class="text-center">Rank</th>
                            </thead>
                            <tbody>
                                @foreach($member as $m)
                            <tr>
                                <td class="text-center">
                                <a href="{{action('MembersController@show', $m->id)}}" title="View" class="btn btn-success"><i class="fa fa-info"></i></a>
                                </td>
                                <td class="text-center">{{$m->membership_number}}</td>
                                <td class="text-center">{{$m->last_name}}, {{$m->first_name}}</td>
                                <td class="text-center">{{$m->memberrank}}</td>
                            </tr>
                                @endforeach
                            </tbody>
                            <tfooter>
                                <tr>
                                </tr>
                            </tfooter>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

@endsection

Это мой файл Member.php

class Member extends Model
{
//
protected $fillable = [
    'id', 'membership_number', 'first_name', 'last_name', 'rank', 'date_joined', 'date_birth', 'active'
];

public function getAgeAttribute()
{
    return Carbon::parse($this->attributes['date_birth'])->age;
}

public function getServiceAttribute()
{
  $now = Carbon::now();

  $service = Carbon::parse(date('Y-m-d',strtotime($this->date_joined)))->DiffInYears($now);
  return $service;  
}

public function ActiveKids()
{
    return $this->hasMany('App\ActiveKids', 'member_id', 'id');
}

public function MemberRank()
{
    return $this->hasOne('App\Rankmapping', 'rank', 'members_rank');
}
} 

Это мой MemberController

class MembersController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    //
    $member = DB::table('members')
            ->join('rankmappings', 'members.rank', '=', 'rankmappings.id')
            ->select('members.*', 'rankmappings.rank as memberrank')
            ->orderBy('last_name')
            ->get();

    return view('members.index', compact('member'));
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    //

    return view('members.add');
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    //
 $validateData  = Validator::make($request->all(), [
     'membership' => 'required',
     'firstname' => 'required',
     'lastname' => 'required',
     'doj' => 'required|date',
     'dob' => 'required|date',
 ]);

 if ($validateData->fails())
 {
     return Redirect::back()->withErrors($validateData)->withInput();
 }

    //Create Member
    $e = new Member();
    $e->membership_number = $request->get('membership');
    $e->first_name = $request->get('firstname');
    $e->last_name = $request->get('lastname');
    $e->rank = "";
    $e->date_joined = $request->get('doj');
    $e->date_birth = $request->get('dob');
    $e->active= "Y";
    $e->save();

    return redirect(action('MembersController@index'))->with('success', 'Member Added');
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    //
    $member = Member::find($id);

    if ($member !=null)
    {
        return view('members.show', compact('member', 'service', 'mrank'));

    }

    return redirect(action('MemberController@index'));
}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */

1 Ответ

0 голосов
/ 06 февраля 2019

Вместо использования join() вы можете выполнить запрос, используя саму модель, чтобы иметь возможность использовать Eloquent, например, метод with().С его помощью вы можете включить отношение ранга, используя with('MemberRank'), или просто вызвать отношение напрямую.

Код будет выглядеть примерно так:

use App\Member; // Important! Import your model

public function index()
{
    $member = Member::with('MemberRank')
            ->orderBy('last_name')
            ->get();

    return view('members.index', compact('member'));
}

public function show($id)
{
    $member = Member::findOrFail($id);

    return view('members.show', compact('member'));
}

Затем в представлениях вы будете называть егонапример:

<td class="text-center">{{$member->MemberRank->rank}}</td>

Подсказка: при использовании Eloquent для создания запроса вы можете просто вызывать отношения, даже не используя with() или load(), чтобы он выполнял запрос для его автоматического получения.Но будьте осторожны: если вы вызовете его для каждого члена списка, он сделает столько запросов, сколько у этого списка есть члены.

Способ обойти это - использовать Eager Loading, чтобы загрузить его в переменную перед вызовом дляданные.Вы можете прочитать об этом здесь: Красноречивый: Отношения / # Жадная загрузка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...