Ich habe eine Datenbank-Design wie das folgendeModell Beziehungen und vorbei Objekte
Poll
id | name
--------------
1 | Poll One
PollQuestion
id | poll_id | question
-------------------------
1 | 1 | Something
PollAnswer
id | question_id | answer
-------------------------------
1 | 1 | Answer 1
-------------------------------
2 | 1 | Answer 2
-------------------------------
3 | 1 | Answer 3
Eine Umfrage One PollQuestion haben kann, und ein PollQuestion können viele PollAnswer des haben.
Das alles funktioniert gut, ich kann Umfragen, Fragen und Antworten erstellen. Dies geschieht in einem Backend, in dem Sie sich als Administrator anmelden müssen.
Am Frontend muss ich die Umfrage Frage und mögliche Antworten anzeigen. Ich habe ein PollResponse-Modell eingerichtet, auf das eine Umfrage viele PollResponse-Antworten haben kann. Models in etwa so aussehen
class Poll extends Model
{
public function pollQuestion()
{
return $this->hasOne('App\PollQuestion', 'poll_id');
}
public function pollResponse()
{
return $this->hasMany('App\PollResponse', 'poll_id');
}
}
class PollResponse extends Model
{
public function poll()
{
return $this->belongsTo('App\Poll');
}
}
Ich habe dann meine Routen wie folgt aufgebaut folgende
Route::group(['middleware' => ['web']], function() {
Route::model('polls.response', 'PollResponse');
Route::resource('/', 'PollResponseController', ['except' => ['create', 'show', 'edit', 'update', 'destroy']]);
Route::group(['middleware' => ['admin_logged', 'can_see']], function()
{
Route::model('polls', 'Poll');
Route::bind('polls', function($value, $route) {
return App\Poll::whereId($value)->first();
});
Route::resource('admin/polls', 'PollController');
Route::model('polls.questions', 'PollQuestion');
Route::resource('polls.questions', 'PollQuestionController', ['except' => ['index', 'create', 'show', 'edit', 'destroy']]);
});
});
Die Idee ist, ein normaler Benutzer die Haupt-Domain besuchen und die neueste Umfrage Frage sehen mit ihren mögliche Antworten. Sie wählen dann eine Antwort und senden ihre Antwort. Der Blick dafür ist, wie die folgenden
<div class="panel-heading">
<h3 class="panel-title"> {{ $question->question }}</h3>
</div>
<div class="panel-body">
{!! Form::model(new App\PollResponse, ['route' => ['store', $poll->id]]) !!}
@if (count($answers) !== 0)
@foreach($answers as $key => $value)
<div class="radio">
<label>
<input type="radio" name="optionsRadios" value="{{ $value->answer }}"> {{ $value->answer }}
</label>
</div>
@endforeach
@endif
{!! Form::submit('Save', array("class"=>"btn btn-info pull-right ")) !!}
{!! Form::close() !!}
</div>
Also das alles funktioniert gut. Ich habe ein Problem mit der Speicherfunktion in meinem PollResponseController. Wenn ich die Antwort einsende, wird poll_id der URL hinzugefügt, die in der Route definiert ist. Aber in der Speicherfunktion, ich derzeit tue
public function store(Request $request, Poll $poll)
{
dd($poll);
}
Ich würde dies erwarten, dass das aktuelle Umfrage Objekt zur Ausgabe, aber es ist noch ein leeres Poll-Objekt ausgibt. Wie kann ich das zugehörige Poll Objekt in diese Funktion bekommen, damit ich die Antworten auf eine bestimmte Umfrage beziehen kann?
Dank