我在Laravel 5应用程序中工作。我尝试为项目保存评论,但我不知道如何获得 $ comment-> project_id 值。
这是我的简化控制器
public function store( CommentsFormRequest $request )
{
$comment = new Note;
$comment->message = Input::get('message');
$comment->project_id = $note->project->id;
$comment->user_id = Auth::id();
$comment->save();
return Redirect::back();
}
这是我的简化表格
{!! Form::open(array('route' => 'notes.store')) !!}
{!! Form::textarea('message', '', array('placeholder'=>'Message')) !!}
{!! Form::submit('Ajouter la note') !!}
{!! Form::close() !!}
当我尝试保存时,我收到此错误:
Trying to get property of non-object
我想这是因为它试图获取新对象的sollicitation_id为null。我应该如何获得当前的project_id值?
更新
结论:我使用隐藏字段并遵循@tommy的推荐。 我的控制器现在使用
$note->project_id = $request->input('project_id');
我的隐藏字段是
{!! Form::hidden('project_id', $project->id ) !!}
答案 0 :(得分:1)
在store方法中,您尝试获取变量project
的属性$note
,该属性不存在。您应该将项目ID传递给store方法,方法是将其添加到路径或向表单添加隐藏字段project_id
。
然后,您的商店方法应如下所示:
public function store($project_id, CommentsFormRequest $request )
{
$project = Project::find($project_id); // $project_id is transmitted over the URL
$comment = new Note; // I'd alias Note as 'Comment', or rename '$comment' to '$note' because this can be confusing in the future
$comment->project_id = $project->id;
$comment->save();
return Redirect::back();
}
如果要将带项目ID的隐藏字段添加到表单,可以通过调用$request->input('project_id');
答案 1 :(得分:1)
仅当表主列名称为'id'时
$model->id;
无论主列名称如何:
$model->getKey();
答案 2 :(得分:0)
我觉得上述答案远非完美,因为您不仅要向用户展示唯一身份证,而且还要长时间啰嗦,如果两个用户加载相同ID,则会失败页面同时,你应该做
public function store(CommentsFormRequest $request )
{
$comment = new Note([
// your fields here
]};
$comment->save();
//$comment now contains a unique ID!
return redirect($comment->id);
}
答案 3 :(得分:0)
您可以使用insertGetId()查询构建器方法获取最后一个ID
如果表具有自动递增ID,请使用insertGetId方法插入记录,然后检索ID:
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);