url值不会通过循环更改

时间:2016-05-26 03:04:09

标签: php mysql laravel laravel-5

我试图在数据库中显示用户的评论,并且可以给他们的评论+1。这是观点。

  <br>Comments:<br>
    @foreach($show as $sh)
    <span class="comment">{{$sh->comment}} --<b style="color:blue">{{$sh->name}},</b> {{$sh->email}}</span>
    <form method="POST" action="{{url("/review/now/add/{$sh->id}")}}">
    {!! csrf_field() !!}<input type="submit" value="+1"> 
    Total score: <mark>{{$sh->score}}</mark><br><br>
    @endforeach 

但是,我点击后每+1个按钮重定向到/review/now/add/1。我应该点击我点击的评论并将其存储在数据库中。 commentname,adn score是数据库列。

路线:

Route::post('/review/now/add/{id}','reviewcontroller@nowadd');

控制器:

public function nowadd($id)
  {
        $add=review::where('id',$id)->get();
        $count=$add->score;
        $now=$count+1;
        $nowadd= review::where('id',$id)->update(['score'=>$now]);  
        return redirect('/review')
        ->with('message','your have +1 d the comment.' );      
}

使用where子句我应该在url中选择该id的行,并为该id的分数添加+1。但我也在这里失败了。它显示未定义的属性分数。 $ add可能是导致此错误的数组。但它怎么可能呢?我只选择具有该ID的一行。当我使用first();代替get();时,一切都很好,但只适用于第一条评论。

2 个答案:

答案 0 :(得分:1)

get()方法将返回Collection类,first()将返回Model类,这是查询中的第一个模型实例

要进行更新,您需要使用模型而不是集合。当您尝试访问Collection上的score属性时,由于score属性位于模型而不是集合上,因此无法正常工作

您实际上可以使用集合,并使用foreach进行查询,这将在每次迭代时为您提供模型

答案 1 :(得分:0)

试试这个:

public function nowadd($id)
{
        review::where('id', $id)->increment('score',1);  // assuming that score is a column in your review database
        return redirect('/review')
        ->with('message','your have +1 d the comment.' );      
}

更新:关闭表单

 <br>Comments:<br>
    @foreach($show as $sh)
    <span class="comment">{{$sh->comment}} --<b style="color:blue">{{$sh->name}},</b> {{$sh->email}}</span>
       <form method="POST" action="{{url("/review/now/add/{$sh->id}")}}">
         {!! csrf_field() !!}<input type="submit" value="+1">
       </form> 
    Total score: <mark>{{$sh->score}}</mark><br><br>
    @endforeach