Je suis proche de finir mon CMS mais j'ai un problème mineur.Laravel | Enregistrer et afficher deux relations
Je peux créer plusieurs équipes, fonctionne parfaitement bien.
Je peux créer plusieurs jeux, fonctionne aussi parfaitement bien.
Maintenant, je veux créer des correspondances entre ces équipes, ce qui signifie que j'ai deux tableaux croisés dynamiques. L'un appelé game_match
et l'autre appelé match_team
.
game_match
se composent de game_id
et match_id
match_team
se composent de match_id
, team1_id
et team2_id
Mon match/create.blade.php
a deux champs de liste déroulante pour chaque équipe. Sauvegarder une seule relation à la base de données fonctionne bien pour moi, comme je l'ai fait à quelques reprises, mais je ne peux pas comprendre comment enregistrer deux relations.
C'est ce que je suis arrivé à ce jour:
intérieur match/create.blade.php
<div class="field m-t-20 is-inline-block">
<p class="control">
<label for="home" class="label"><b>{{ trans_choice('messages.home', 1) }}</b></label>
<input type="hidden" name="home" id="home" :value="homeSelected">
<div class="select">
<select v-model="homeSelected">
@foreach($teams as $team)
<option value="{{ $team->id }}">{{ $team->name }}</option>
@endforeach
</select>
</div>
</p>
</div>
<div class="field m-t-20 is-inline-block">
<p class="control">
<label for="opponent" class="label"><b>{{ trans_choice('messages.opponent', 1) }}</b></label>
<input type="hidden" name="opponent" id="opponent" :value="opponentSelected">
<div class="select">
<select v-model="opponentSelected">
@foreach($teams as $team)
<option value="{{ $team->id }}">{{ $team->name }}</option>
@endforeach
</select>
</div>
</p>
</div>
@section('scripts')
<script>
var app = new Vue({
el: '#app',
data: {
homeSelected: "",
opponentSelected: "",
gameSelected: ""
}
});
</script>
@endsection
MatchController.php
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|max:255',
'matchday' => 'required',
]);
$match = new Match();
$match->title = $request->title;
$match->matchday = $request->matchday;
if ($match->save()) {
$match->games()->sync($request->game);
$match->teams()->sync([
['team1_id' => $request->home, 'team2_id' => $request->opponent],
]);
Session::flash('success', trans('messages.created', ['item' => $match->title]));
return redirect()->route('matches.show', $match->id);
} else {
Session::flash('error', trans('messages.error'));
return redirect()->route('matches.create')->withInput();
}
}
match.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Match extends Model
{
use SoftDeletes; // <-- Use This Instead Of SoftDeletingTrait
protected $fillable = [
'title'
];
protected $dates = ['deleted_at'];
public function setHomeTeam() {}
public function teams() {
return $this->belongsToMany('App\Team', 'match_team', 'match_id', 'team1_id');
}
public function games() {
return $this->belongsToMany('App\Game', 'game_match');
}
public function getHomeTeam() {
return $this->belongsToMany('App\Team', 'match_team', 'match_id', 'team1_id');
}
public function getOpponentTeam() {
return $this->belongsToMany('App\Team', 'match_team', 'match_id', 'team2_id');
}
}
Quelqu'un peut-il m'aider?
Cela ne résout pas le problème auquel je suis confronté en sauvegardant deux relations de la même table étrangère. – Kazuto