Php 保存时如何在Laravel中获取当前模型的id
我在一个Laravel 5应用程序中工作。我试图为项目保存评论,但我不知道如何获取$comment->project\u id值 这是我的简化控制器Php 保存时如何在Laravel中获取当前模型的id,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在一个Laravel 5应用程序中工作。我试图为项目保存评论,但我不知道如何获取$comment->project\u id值 这是我的简化控制器 public function store( CommentsFormRequest $request ) { $comment = new Note; $comment->message = Input::get('message'); $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。如何获取当前项目id值
更新
结论:我使用了一个隐藏字段并遵循@tommy的建议。
我的控制器现在使用
$note->project_id = $request->input('project_id');
我隐藏的领域是
{!! Form::hidden('project_id', $project->id ) !!}
在store方法中,尝试获取变量
$note
的属性project
,该属性不存在。您应该通过将项目ID添加到路由或将隐藏字段project\u ID
添加到表单,将项目ID传递给store方法
然后,您的存储方法应该如下所示:
公共函数存储($project\u id,CommentsFormRequest$request)
{
$project=project::find($project_id);//$project_id通过URL传输
$comment=new Note;//我希望将注释别名为“comment”,或者将“$comment”重命名为“$Note”,因为这在将来可能会造成混淆
$comment->project\u id=$project->id;
$comment->save();
返回重定向::返回();
}
如果要向表单中添加带有项目ID的隐藏字段,可以通过调用
$request->input('project_ID')访问其值代码>我觉得上述答案远非完美,因为您不仅向用户公开了唯一的ID,而且内容冗长,如果两个用户同时加载同一页面,则会失败,而您应该这样做
public function store(CommentsFormRequest $request )
{
$comment = new Note([
// your fields here
]};
$comment->save();
//$comment now contains a unique ID!
return redirect($comment->id);
}
您可以使用insertGetId()查询生成器方法获取最后一个id
如果表具有自动递增的id,请使用insertGetId方法插入记录,然后检索id:
仅当表主列名为“id”时:
$model->id;
无论主列名是什么:
$model->getKey();
请注意,您实际上不必从数据库中获取整个项目($project=project::find($project_id);
),但关于您的问题,这应该让您明白了:-)我按照您最后的说明创建了一个隐藏字段。然后我通过=$request->input('project_id')获得值;我很高兴你找到了解决办法!
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);