在模型之间传递对象

时间:2016-03-18 10:09:05

标签: laravel laravel-5 laravel-5.1

我有几个这样的模型(为简单起见,删除了一些代码)

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。为什么会发生这种情况,因为我正在传递我以前抛弃过的投票对象?

由于

1 个答案:

答案 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 在路线中定义变量,如模型。此方法搜索路径中传递的主键并检索模型。