添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
逆袭的墨镜  ·  File.Create(zipFilePat ...·  8 月前    · 
仗义的稀饭  ·  getting sh: =~: ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am working in a Laravel 5 application. I try to save a comment for a projet and I don't know how to get the $comment->project_id value.

Here is my simplified controller

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();

and here is my simplified form

  {!! Form::open(array('route' => 'notes.store')) !!}
    {!! Form::textarea('message', '', array('placeholder'=>'Message')) !!}
  {!! Form::submit('Ajouter la note') !!}
  {!! Form::close() !!}

When I try to save, I get this error:

Trying to get property of non-object

I guess it's because it tries to get the sollicitation_id of the new object wich is null. How should I get the current project_id value?

Update

Conclusion: I used an hidden field and followed @tommy 's recommendation. My controller now uses

$note->project_id  = $request->input('project_id');

and my hidden field is

{!! Form::hidden('project_id', $project->id ) !!}

In the store method, you try to get the property project of the variable $note, which does not exist. You should pass the project ID to the store method by either adding it to the route or adding a hidden field project_id to your form.

Then, your store method should look something like this:

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();

If you want to add a hidden field with the project ID to the form, you can access its value by calling $request->input('project_id');

Just to note, you don't really have to fetch the whole project from the database ($project = Project::find($project_id);), but referring to your question, this should make things clear for you :-) – tommy May 26, 2015 at 18:06 I follow your last note and created an hidden field. Then I get the value with = $request->input('project_id'); – Lucien Dubois May 26, 2015 at 18:13

I feel the above answer is far from perfect as you're not only exposing Unique ID's to users but it's also long winded, and would fail if two users were to load the same page at the same time, instead you should do

public function store(CommentsFormRequest $request )
    $comment = new Note([
       // your fields here
    $comment->save();
    //$comment now contains a unique ID!
    return redirect($comment->id);
  

If the table has an auto-incrementing id, use the insertGetId method to insert a record and then retrieve the ID:

$id = DB::table('users')->insertGetId(
    ['email' => 'john@example.com', 'votes' => 0]

for more info check document

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.