我正在撰写图像投票竞赛申请表。我是这种基于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();
获得总计数这是一个很好的选择来计算投票吗?
答案 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;