Tworzę stronę z wynikami dla boksu, staram się, aby bokserzy przeszli obok wyników, ale walczę z relacjami ...
Na przykład bokser może mieć wiele wydarzeń (walka) i 1 wynik (wygrana, remis lub przegrana) i 1 przeciwnik. Próbuję wyświetlić wszystkie wyniki bokserów z informacjami o przeciwnikach
Mam więc zdarzenie ze strukturą (w razie potrzeby mogę dodać identyfikator relacji)
Schema::create("events", function (Blueprint $table) {
$table->increments("id");
$table->string("name");
$table->date("date");
$table->string("location");
$table->timestamps();
$table->softDeletes();
});
Mam stolik bokserski
Schema::create("boxers", function (Blueprint $table) {
$table->increments("id");
$table->string("name");
$table->string("status");
$table->string("division");
$table->string("stance");
$table->date("dob");
$table->integer("height");
$table->string("nationality");
$table->string("residence");
$table->string("birthplace");
$table->timestamps();
$table->softDeletes();
});
i wyniki
Schema::create("results", function (Blueprint $table) {
$table->increments("id");
$table->integer("user_id");
$table->integer("event_id");
$table->string("result");
$table->timestamps();
$table->softDeletes();
});
Co powinienem dodać i zmienić, aby związek działał poprawnie?
Odpowiedzi:
0 dla odpowiedzi № 1Wydarzenia zazwyczaj hasMany
pojedynki (wiele pojedynków na karcie), każda walka hasMany
(dwóch) sportowców. Tak więc twój stosunek walki do sportowca byłby wiele do wielu (zawodnicy mają wiele walk przez całą karierę). Utworzysz tabelę przestawną athletes_fights
który będzie miał fight_id
i athlete_id
kolumny. Ponadto ta tabela przestawna może mieć wartość winner_id
i a draw
kolumna. Remis może domyślnie wynosić 0, 1, jeśli walka jest remisem. Mógłby również win_method
(może nawet stworzyć do tego kolejną tabelę i zrobić to win_method_id
), win_round
, win_time
.
Sprawdź sekcję relacji w dokumentach Laravela, jeśli jeszcze tego nie masz.
Twój model byłby więc…
Event
Fight
Athlete