Upvote или downvote к сообщениям пользователей - PullRequest
0 голосов
/ 05 октября 2018

Я хочу повысить или понизить сообщение, опубликованное другим пользователем. Пользователь загрузит сообщение, i

Миграция для таблицы голосования

public function up()
{
    Schema::create('votes', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('user_id');
        $table->foreign('user_id')->references('id')->on('users');
        $table->unsignedInteger('post_id');
        $table->foreign('post_id')->references('id')->on('posts');
        $table->integer('vote');
        $table->boolean('hide')->default(0);
        $table->timestamps();
    });
}

Файл маршрута

api.php

Route::group(['middleware'=>[
                'auth:api', \App\Http\Middleware\OnlyRegisteredUsers::class]
            ], function(){
    /**
     * Group for registered users only APIs
     */
    Route::post('saveMedia','UserController@saveMedia');
    Route::post('voteToPost','UserController@voteToPost');
});

Контроллер

public function voteToPost(Request $request)
{
    $userid = $request->user()->id;
    $postid = $request->get('post_id');
    $vote = $request->get('vote');
    $votecount = DB::table('votes')->where('user_id', $userid)->where('post_id', $postid)->wherea('hide', 0)->count();
    if($votecount == 0){
        DB::table('votes')
            ->leftJoin('users', 'users.id', '=', 'votes.user_id')
            ->leftJoin('posts', 'posts.id', '=', 'votes.post_id')
            ->where(['votes.hide' => 0, 'votes.user_id' =>$userid, 'votes.post_id' =>$postid])
            ->updateOrInsert([
                'user_id' => $userid,
                'post_id' => $postid,
                'vote' => $vote,
                'hide' => 0,
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now()
            ]);
    }
}

Я получаю следующую ошибку "сообщение ":" SQLSTATE [23000]: нарушение ограничения целостности: 1052 Столбец «скрыть», где предложение неоднозначно (SQL: выбор существует (выберите * из votes левое соединение users на users. id = votes. user_id левое соединение posts на posts. id = votes. post_id где (votes. hide = 0 и votes. user_id = 3 и votes. post_id = 6) и (user_id = 3 и post_id = 6 и vote = 1 и hide = 0 и created_at = 2018-10-05 11:44:38 иupdated_at = 2018-10-05 11:44:38)) как exists) ",

1 Ответ

0 голосов
/ 06 октября 2018
public function voteToPost(Request $request){
        $userid = $request->user()->id;
        $postid = $request->get('post_id');
        $vote = $request->get('vote');
        $user = User::where(['id'=>$userid, 'hide'=>0])->first();
        $post = DB::table('posts')->where(['id'=>$postid, 'hide'=>0])->first();
        if($user && $post && in_array($vote, [0,1,-1])){
                DB::table('votes')
                    ->updateOrInsert(['user_id'=>$userid, 'post_id'=>$postid],[
                        'user_id' => $userid,
                        'post_id' => $postid,
                        'vote' => $vote,
                        'hide' => 0,
                        'created_at' => Carbon::now(),
                        'updated_at' => Carbon::now()
                    ]);
                return ['message'=>'ok'];
        }
        return abort(403, 'Invalid request');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...