使用orm的类PHP逻辑

使用orm的类PHP逻辑,php,orm,fuelphp,social-media-like,Php,Orm,Fuelphp,Social Media Like,我有一个小网站,我想让用户能够喜欢ajax的每个配置文件 所以逻辑是这样的,如果用户点击它插入的like,但是如果用户已经喜欢了并且在数据库中找到了删除记录,那么这将是一个不同的函数 控制器是这样的 public function action_like() { $response = Response::forge(); $like = Model_Like::forge(); $like->user_id = Input::post('user_id');

我有一个小网站,我想让用户能够喜欢ajax的每个配置文件

所以逻辑是这样的,如果用户点击它插入的like,但是如果用户已经喜欢了并且在数据库中找到了删除记录,那么这将是一个不同的函数

控制器是这样的

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\u id”和“$like->liked\u 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的查询对象会返回,因为它不知道要查找什么。这种行为在将来的版本中可能会发生变化。

您是如何定义类似于
模型的