У меня есть таблица клубов с полем:
id,name,est_date,CEO ....
у меня есть стол игроков с полем:
id, name,DOB,height,weight, .....
Таблица истории игрока:
id,player_id,previous_club_id,current_club_id,position, ......
таблица истории клуба:
club_id, championship_id,status, ...
На странице просмотра club_histories я могу показать:
club name,championship name and status...
но я хочу показать соответствующего игрока клуба тоже в таблице club_histories … как это возможно ???
ответьте, пожалуйста…
Отредактированная часть: добавлен код
routes.php:
Route::resource('clubhistories','ClubHistoryController');
ClubHistoryController.php:
public function show($id,ClubHistory $clubhistories)
{
$club=$clubhistories->find($id);
$clubhistories=$clubhistories->getPlayerByCLub();
return view('pages.singleClub',compact('club','clubhistories'));
}
ClubHistoryRepository.php
public function getPlayerByCLub(){
return $this->makeModel() ->join('clubs', 'clubs.id', '=', 'club_histories.club_id')
->join('player_histories','player_histories.current_club_id', '=', 'clubs.id')
->join('players', 'players.id', '=', 'player_histories.player_id')
->get([
'clubs.name',
'player_histories.player_id',
'players.name',
]);
}
SingleClub.blade.php:
<div class="tab-content">
<div class="tab-pane in active" id="basic">
<table class="table table-condensed">
<thead>
<tr>
<th>Name</th>
<th>contact</th>
</tr>
</thead>
<tbody>
<tr>
<td>Name:</td>
<td>{!!$club->club->name!!}</td>
</tr>
<tr>
<td>Contact:</td>
<td>{!!$club->club->contact_no!!}</td>
</tr>
</tbody>
</table>
</div>
<div class="tab-pane fade" id="players">
<table class="table table-condensed">
<thead>
<tr>
<th>Player name</th>
<th>Position</th>
</tr>
</thead>
<tbody>
@foreach($clubhistories as $clubhistories)
<tr>
<td> {!! $clubhistories->name!!} </td>
<td> {!! $clubhistories->position!!} </td>
</tr>
@endforeach
</tbody>
</table>
</div>
Вышеуказанное объединение используется, и решение, которое вы дали, дает то же самое решение. Я хочу передать один и тот же идентификатор, найденный по истории клубов в объекте клуба, в объект клубной истории, так что будет показан весь игрок клуба.
не могли бы вы мне помочь..
Вы можете видеть игроков в club_histories либо через объединения (меньше запросов), либо через отношения Eloquent (более простой код).
С помощью Красноречивые Отношения (при условии, что вы их настроили):
$histories = ClubHistory::with('players', 'club')->get();
// In your blade view
@foreach ($histories as $history)
<p>{{ $history->club->name }} won {{ $history->championship_name }}</p>
<p>Status: {{ $history->status }}
<div>Player list:
<ul>
foreach ($history->players as $player)
<li>{{ $player->name }}</li>
@endforeach
</ul>
</div>
@endforeach
Присоединяется к построителю запросов:
DB::table('club_histories')
->join('player_histories',
'player_histories.current_club_id', '=', 'club_histories.club_id')
->join('players', 'players.id', '=', 'player_histories.player_id')
->join('club', 'club.id', '=', 'club_histories.club_id')
->get([
'club.name AS clubName',
'club_histories.championship_name',
'club_histories.status',
'player_histories.player_id',
'players.name AS playerName',
]);
Обратите внимание, что приведенное выше вернет одну строку на игрока за историю клуба
РЕДАКТИРОВАТЬ:
После просмотра вашего кода, вот версия выше, которая должна работать с вашей нестандартной кодовой базой. Обязательно передайте удостоверение личности getPlayerByClub($id)
,
ClubHistoryRepository.php
public function getPlayerByCLub($clubHistoryId) {
return $this->makeModel()
->join('clubs', 'clubs.id', '=', 'club_histories.club_id')
->join('player_histories', 'player_histories.current_club_id', '=', 'clubs.id')
->join('players', 'players.id', '=', 'player_histories.player_id')
->where('club_histories.id', '=', $clubHistoryId)
->get([
'clubs.id',
'club_histories.championship_name',
'club_histories.status',
'player_histories.player_id',
'clubs.name',
'players.name',
]);
}
Других решений пока нет …