0

ユーザーが 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常に retunrsnullであるため、2 つの ID と常に挿入が見つからないことです。

誰かが私に欠けているもののヒントを教えてください。

4

3 に答える 3

1

「場所」に誤りがあると思います。これで試すことができますか?

$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」を持つレコードを検索します。両方を含む単一の行ではありません。

于 2012-10-08T10:22:26.317 に答える
0

ドキュメントによると、find() にはパラメーターとして主キーが必要です。

「Marco Pace」と「notrab」で言及されているソリューションを使用して、クエリを実行できます。最初のケースでは、使用

Model_Like::query()

そしてそうではない

Model_Like::find()

パラメーターを渡さないことは、ORM のクエリ オブジェクトが返されるエラー状況であるため、最後のものはたまたま機能します。この動作は、将来のバージョンで変更される可能性があります。

于 2012-10-31T19:40:32.270 に答える
0

今日、ここで同様の質問を見ました。

できるよ

Model_Like::find_by_user_id_and_liked_id($like->user_id, $like->liked_by);
于 2012-10-18T20:21:55.480 に答える