Как увеличить количество атрибутов модели? - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь создать очень простой блог, используя Laravel и Ajax, у каждого сообщения в блоге есть лайки, поэтому я хочу увеличить лайки, щелкая и обновляя БД, также в консоли нет ошибок.

это моя схема:

Schema::create('blogs', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->longText('blogContent');
            $table->timestamps();
            $table->integer('likes')->default(8);
        });

вот мой шаблон и скрипт блейда:


@section('content')
  <div class="myFeedContainer col-lg-9 col-md-12 col-sm-12">
      @foreach ($blogs as $blog)
      <div class='blogContainer'>
            <h5 class='blogTitle'>{{$blog->title}}</h5>
            <h6 class='blogDate'>{{$blog->created_at}}</h6>
            <p class='blogContent1' >{{$blog->blogContent}}</p>
            <hr>
            <h6 class='blogLikes' class="clickforlikes" data-id='{{$blog->id}}'>
              {{$blog->likes}} 
              <ion-icon name="heart" ></ion-icon>
            </h6>      

            <br>
        </div>
      @endforeach

      <div id='pagina'>{{ $blogs->render() }}</div>

      <script>
        $('.clickforlikes').on("click", function(){
          $.ajax({
            url:'updateLikes',
            type: 'POST',
            data: {
              blog_id: $(this).attr('data-id')
            },
            success: function (data){
              console.log(data);
            },
            error: function(request, stqtus, error){
              console.log('code: ' + request.status + '\n' + 'msg: '+request.responseText+'\n'+'error: ' + error);
            }
          });
        });

    </script>
  </div>    
@endsection

А это функция из моего контроллера


  public function updateLikes()
  {
    $blog_Id = $_POST['blog_id'];
    $blog = Blog::find($blog_Id)->increment('likes');
    $blog->save();
  }

Этомаршрутизатор:

Route::post('/updateLikes', 'BlogsController@updateLikes');

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Вы используете метод POST. Вы можете получить эти данные с помощью контейнера запроса службы в методе updateLikes().

public function updateLikes(Request $request)
{
    $blog_Id = $request->get('blog_id');
    $blog = Blog::find($blog_Id)->increment('likes');
    // other codes if needed
}
0 голосов
/ 12 октября 2019

Вы пытаетесь сделать это способом PHP. Поскольку вы используете фреймворк, вы должны воспользоваться его замечательными функциями. В Laravel вам придется сделать что-то вроде этого:

Маршрутизатор:

Route::put('updateLikes/{id}', 'BlogsController@updateLikes');

Контроллер:

public function updateLikes($id) { $blog = Blog::find($id)->increment('likes'); $blog->save(); }

Вызов Ajax:

<script> $('.clickforlikes').on("click", function(){ $.ajax({ url:'updateLikes/'+$(this).attr('data-id'), type: 'PUT', success: function (data){ console.log(data); }, error: function(request, stqtus, error){ console.log('code: ' + request.status + '\n' + 'msg: '+request.responseText+'\n'+'error: ' + error); } }); }); </script>

Метод HTTP отличается, поскольку POST-запрос предназначен для создания нового ресурса в базе данных. С другой стороны, PUT используется для обновления ресурса. Ваш запрос ajax вызовет маршрут с добавленным к нему идентификатором блога, и контроллер получит идентификатор в качестве параметра и выполнит обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...