Fuelphp与orm的逻辑相似

时间:2012-09-28 10:11:26

标签: php orm fuelphp social-media-like

我有一个小网站,我希望用户能够使用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并且总是插入。

可以请某人给我一个暗示我缺少的东西吗?

3 个答案:

答案 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的查询对象,因为它不知道要查找什么。在将来的版本中,此行为可能会更改。