我有一个小网站,我希望用户能够使用ajax来描述每个个人资料。
所以逻辑是这样的,如果使用点击它插入的类似,但如果已经喜欢的人和在数据库中找到的人删除了记录,这将是不同的功能。
所以控制器看起来像这样。
public function action_like()
{
$response = Response::forge();
$like = Model_Like::forge();
$like->user_id = Input::post('user_id');
$like->liked_by = Session::get('sentry_user');
// find if the user already liked
$row = Model_Like::find(array($like->user_id, $like->liked_by));
//if liked remove from database
if($row):
$response->body(json_encode(array(
'status' => 'no',
)));
$row->delete();
else:
$response->body(json_encode(array(
'status' => 'yes',
)));
$like->save();
endif;
return $response;
}
javascript
$('button.like').on('click', function(){
var likeId = $(this).data('like')
valPlus = parseInt($('.like-total').text()) + 1;;
$.ajax({
type: "POST",
url: site_url + 'profile/like/',
data: {user_id: likeId},
dataType: "json",
context: this,
//async: false,
beforeSend: function(data) {
$(this).attr('disabled', 'disabled');
},
success: function(data) {
console.debug(data);
if(data.status == "yes") {
$('.like-total').text(valPlus);
}
},
complete: function(data) {
$(this).removeAttr('disabled', 'disabled');
}
})
});
所以问题是$row
总是重新调整null
,所以它不是找到两个id并且总是插入。
可以请某人给我一个暗示我缺少的东西吗?
答案 0 :(得分:1)
我认为你的“Where”有错误。你能尝试一下吗?
$row = Model_Like::find()->where(array(
array('user_id', $like->user_id),
array('liked_id', $like->liked_by)
));
使用您的“Where”,您可以使用ID“$ like-> user_id”和“$ like-> likes_by”搜索记录,而不是同时使用这两个记录的单行。
答案 1 :(得分:0)
今天在这里看到类似的问题。
你可以做到
Model_Like::find_by_user_id_and_liked_id($like->user_id, $like->liked_by);
答案 2 :(得分:0)
根据文档:find()需要主键作为参数。
您可以使用“Marco Pace”和“notrab”提到的解决方案来运行查询。在第一种情况下,使用
Model_Like::query()
而不是
Model_Like::find()
最后一个恰好工作,因为没有传递任何参数是一个错误情况,其中返回ORM的查询对象,因为它不知道要查找什么。在将来的版本中,此行为可能会更改。