我有几个这样的模型(为简单起见,删除了一些代码)
class Poll extends Model
{
public function poll()
{
return $this->hasOne('App\PollQuestion', 'pollId');
}
}
class PollQuestion extends Model
{
public function poll()
{
return $this->belongsTo('App\Poll');
}
}
然后我设置了所有路线,对于PollQuestion,它们目前看起来像这样
Route::model('polls.questions', 'PollQuestion');
Route::get('/admin/polls/{id}/addquestions', [
'as' => 'polls.questions.create',
'uses' => 'PollQuestionController@addQuestions'
]);
Route::post('/admin/polls/{id}/storequestions', [
'as' => 'polls.questions.store',
'uses' => 'PollQuestionController@storeQuestion'
]);
在我的PollQuestionController中,查看我有的问题视图
public function addQuestions(Request $request)
{
$poll = Poll::where('id', '=', $request->id)->first();
return view('poll.admin.questions', compact('poll'));
}
如果我转储民意调查,请在此视图中。
{{ dd($poll) }}
我可以看到我期望看到的东西。对于问题表格,我正在做
{!! Form::model(new App\PollQuestion, [
'route' => ['polls.questions.store', $poll]
]) !!}
所以我认为应该将我以前转储的Poll对象传递给我的商店函数。但是,在商店功能中,我做了
public function storeQuestion(Request $request, Poll $poll) {
dd($poll);
}
它显示Null。为什么会发生这种情况,因为我正在传递我以前抛弃过的投票对象?
由于
答案 0 :(得分:1)
您需要正确使用路线模型绑定。根据{{3}}
Route::model('poll-question', App\PollQuestion::class);
Route::get('/admin/polls/{poll-question}/addquestions', [
'as' => 'polls.questions.create',
'uses' => 'PollQuestionController@addQuestions'
]);
Route::post('/admin/polls/{poll-question}/storequestions', [
'as' => 'polls.questions.store',
'uses' => 'PollQuestionController@storeQuestion'
]);
Route :: model 在路线中定义变量,如模型。此方法搜索路径中传递的主键并检索模型。