Laravel形式只保存在阵列中的最后一个

时间:2015-09-16 14:40:39

标签: laravel-5

现在我正在聊天,我正在处理的是能够接收选定的聊天消息并将其转换为带评论的帖子。我的斗争是,现在我只收到最后一次保存的评论,没有任何评论。这与我在相信控制器中保存时无法正确编写foreach循环有关。

我现在得到的错误是

 Invalid argument supplied for foreach()

我正在显示评论者数组但未正确保存。评论员是所涉及的用户的ID,而user_id(不是userId)是我需要为两者保存的,现在只获得'11'而不是'9'。正如您从错误消息中看到的那样

  ...'commenters' => '  9,  11, ', 'user_id' => '11', 'comment' => 'hey there'), 'userId' => '9', 'commentorIds' => array(), 'createPost' => object(Post))) 

表格

<div class="selectedChatSection" style="padding: 15px 15px 15px 15px;">
  {!! Form::open(['url'=>'post/selectedChatPost']) !!}
    <div class="jumbotron">
      <center><img src="/img/icons/icon-chat.png"></center>
    </div>
  @foreach ($postSavers as $postSaver)
      <div class="postSaverId" data-id="{{$postSaver->id}}"></div>
  @endforeach
    <input type="hidden" name="space-id" value="">
    <input type="hidden" multiple="multiple" name="commenters" value="@foreach($selectedChats as $selectedChat){{$selectedChat->id}},   @endforeach ">
  @foreach ($selectedChats as $selectedChat)
    <div style="border-top: 1px solid #eee;padding: 10px 10px 10px 10px;">
    <p><img src="/assets/avatars/{{$selectedChat->avatar}}" height:"75" width="75" style="border-radius:50px;">&nbsp;&nbsp;<input type="hidden" name="user_id" value="{{$selectedChat->id}}">{{$selectedChat->name}}&nbsp;&nbsp;:&nbsp;&nbsp;<input type="hidden" name="comment" value="{{$selectedChat->body}}">{{$selectedChat->body}}</p>
  @endforeach 
</div>

<div class="modal-footer">
  {!! Form::submit('post', ['id'=> 'post-button']) !!}
  {!! Form::close() !!} 
</div>

控制器

    public function storeSelectedChat() {
    $input = Request::all();
    $userId = Auth::user()->id;
    $commentorIds = array();

    $createPost = new Post;
    $createPost->space_id = 8;
    $createPost->user_id = $userId;
    // $createPost->content = $input['content'];
    $createPost->linkPhoto = "/img/icons/icon-chat.png";    
    $createPost->save();

    //needs to be a foreach loop here for each comment/chat segment.

        foreach(Input::get('commenters') as $commenter) {
            $createComments = new Comment();        
            $createComments->post_id = $createPost->id;
            $createComments->comment = $input['comment'];
            $createComments->user_id = $commenter;
            $createComments->save();
        }
    }

非常感谢任何帮助。我以前做过这个,但由于某种原因,似乎没有任何东西在这个例子中起作用。感谢。

1 个答案:

答案 0 :(得分:1)

您的<input type="hidden" multiple="multiple" name="commenters" value="@foreach($selectedChats as $selectedChat){{$selectedChat->id}}, @endforeach ">不应具有多个属性。

  

multiple属性适用于以下输入类型:email,   和文件。

根据http://www.w3schools.com/tags/att_input_multiple.asp。即使多重属性在逻辑上对你有意义,因为逻辑上你有多个评论员,从语义上来说它是不正确的。您仍然有一个<input>属性,逻辑上包含的内容由您解释。您应该使用正则表达式来分隔逗号分隔的输入,然后在结果数组上使用foreach