не удалось отфильтровать запрос через промежуточное ПО - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь отфильтровать свой HTTP-запрос с помощью промежуточного программного обеспечения.
Я хочу проверить, не существует ли "friends_id" , который я получаю из HTTP-запроса, и "my_id" , который я передаю через Auth, в том же row, если они это сделают, я хочу перенаправить на домашнюю страницу, а если нет, я хочу выполнить обычный запрос, который в конечном итоге вставит данные, которые я проверяю

Ошибка " Попытка получить свойство "friends_id" не-объекта "

Вот промежуточное ПО« Друзья »: -

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class Friends
{

    public function handle($request, Closure $next)
    {  $auth = Auth()->user()->id;
        $dost = $request->friends_id;

        $ip = DB::table('friends')
   ->where('my_id', '=', $auth)
        ->where('friends_id', '=', $dost)
        ->get();

   if($ip->friends_id != $dost){
        return $next($request);
    }


return redirect('/home');

    }
}

Вот мои друзья Таблица: -

 public function up()
    {
        Schema::create('friends', function (Blueprint $table) {
            $table->id();
        $table->string('my_id');
        $table->string('friends_id');
        $table->string('name');     
            $table->timestamps();
        });
    }

Это мой маршрут: -

Route::post('/f', 'FriendsController@store')->middleware('friends');

-Спасибо

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Попробуйте это

ваш запрос будет неправильным, используйте where вместо whereColumn, а когда вы получите первую запись, используйте только first() не get()

 use DB;

 $ip = DB::table('friends')
       ->select('my_id', 'friends_id')
       ->where([['my_id', '=', '$auth'],['friends_id', '=', '$dost']])
       ->first();

РЕДАКТИРОВАТЬ

public function handle($request, Closure $next)
{  
    $auth = Auth()->user()->id;
    $dost = $request->friends_id;

    $ip = DB::table('friends')
       ->select('my_id', 'friends_id')
       ->where([['my_id', '=', '$auth'],['friends_id', '=', '$dost']])
       ->first();

    if($ip->friends_id == $dost){
        return redirect('/home');
    } else {
        return $next($request);
    }
}
0 голосов
/ 26 мая 2020

Решение: -

Промежуточное ПО друзей: -

public function handle($request, Closure $next)
    {
        if (auth()->check()) {
            $ip = DB::table('friends')->where('my_id', '=', auth()->id())->where('friends_id', '=', $request->friends_id)->first();

            if ($ip && $ip->friends_id == $request->friends_id) {
                return redirect('/home');
            }
        }

        return $next($request);
    }
}
...