Fuelphp与orm一样的逻辑

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

可以请有人给我一个暗示我失踪了什么?

谢谢


我认为你在“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-> liked_by”的记录,而不是与他们两个的单行记录。


今天在这里看到一个类似的问题。

你可以做

Model_Like::find_by_user_id_and_liked_id($like->user_id, $like->liked_by);

根据文档:find()需要一个主键作为参数。

您可以使用“Marco Pace”和“notrab”提到的解决方案运行查询。 在第一种情况下,使用

Model_Like::query()

并不是

Model_Like::find()

最后一个恰好工作,因为不传递任何参数是ORM的查询对象返回的错误情况,因为它不知道要找什么。 此行为在未来版本中可能会更改。

链接地址: http://www.djcxy.com/p/64805.html

上一篇: Fuelphp Like logic with orm

下一篇: Property not found