动态Laravel / Ajax图像投票页面的最佳方法

时间:2014-02-07 19:32:01

标签: php jquery ajax laravel-4

我正在撰写图像投票竞赛申请表。我是这种基于ajax的动态页面的新手。我有关于如何正确使用它的问题,因为这是我的第一次尝试,我需要一些基于性能的问题的答案。我可以添加投票但是,我无法获得图像的总票数。因此,我的头脑对性能感到困惑,因为所有用户都可以同时投票。如何显示每张图片的总投票数。我的db表在第二个问题中如下。

我为每张图片添加了一个投票按钮:

  <button type="submit" class="btn btn-mini upvote newsbutton" id="{{ $contestimage->id }}">
        <i class="fa fa-thumbs-up fa-2x"></i>
  </button>
  <div id="voteresponse"></div>

并使用ajax将表单发送到路由:

$('.upvote').click( function(event) {

          event.preventDefault();

          $("#voteresponse").html('');
            var voteID = $(this).attr("id");

            $.ajax({
              url: "voteimage",
              type: "post",
              dataType: "json",
              data: {id : voteID},
              success: function(data, textStatus){
                if(data.success == 'true'){
                  $('#voteresponse').html(data.message);
                  return true;
                }else{
                  $('#voteresponse').popover({
                    title: 'Hata!',
                    content: data.message 
                  });
                }
              },
              error:function(){
                  $('#voteresponse').popover({
                    title: 'error!',
                    content: 'Server error' 
                  });
              }
            }); 
          });

我的控制器操作是

   public function postVote($id = null)
    {    
        if (Sentry::check()) {

            if (Request::ajax())
            {

                $id=Input::get('contestImageId');
                $image = ContestImage::find($id);

                $vote = "1";
                $user = Sentry::getUser()->id;

                // Grab the vote if it already exists.
                $entry = Vote::where('user_id', $user)->where('contest_id', $image)->first();

                if (!empty($entry))
                {
                    $entry->vote = $vote;
                    $entry->save();
                }
                else
                {
                    $entry = new Vote;
                    $entry->user_id = $user;
                    $entry->contest_id = $image->id;
                    $entry->vote ="1";
                    $entry->save();
                }
            }
            else
            {
                return "Not an AJAX request.";
            }
        }
        else
        {
            return "User not logged in.";
        }
    }

代码可以工作,但我现在卡住了。我不知道如何发回总投票数和所有其他ajax页面如何在任何其他用户投票时添加脚本来刷新votecount?这会产生任何性能问题吗?

第二个问题与第一个问题有关:我创建了我的投票迁移并在db中收集

user_id(int)
contestimage_id(int)
vote(tinyinteger to use as 1)

我有一个belongsTo并且在投票和竞争对手之间有很多关系,我希望使用$contestimage->votes()->count();获得总计数这是一个很好的选择来计算投票吗?

1 个答案:

答案 0 :(得分:1)

你应该编写一个计算投票数量的函数,查看原始表达式&#39;在this页面上,这应该会帮助你。您可以使用MySql count(*)来计算行数。

使用该功能,显示页面上的投票数量,然后在成功运行postVote函数后返回总投票数。

$entry = new Vote;
$entry->user_id = $user;
$entry->contest_id = $image->id;
$entry->vote ="1";
$entry->save();
// RETURN NUMBER OF VOTES HERE

然后让返回的号码更新包含总投票数的div

if(data.success == 'true'){
$('#voteresponse').html(data.message);
$('#totalvotes').html(data.totalvotes);
return true;