Laravel Middleware Redirect, если таблица пуста - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь настроить промежуточное программное обеспечение, которое запрещает пользователям просматривать URL-адреса, если они не сохранили информацию об адресе доставки в моей базе данных. Однако он не работает.

Миграция:

Schema::create('addresses', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->string('street');
            $table->string('city');
            $table->string('state');
            $table->string('zip');
            $table->string('country');
            $table->timestamps();
        });

Промежуточное программное обеспечение:

public function handle($request, Closure $next)
    {
        if (!$request->user()->addresses('id')) {
            return redirect('shipping');
        }

        return $next($request);
    }

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Метод отношения addresses() возвращает QueryBuilder, что составляет true thful. Я рекомендую вместо этого проверить количество адресов , используя совокупный метод count.

if ($request()->user()->addresses()->count() == 0) {
    return redirect('shipping');
}
0 голосов
/ 01 февраля 2020

если ваше имя промежуточного программного обеспечения является отношением для бывшего, то вы можете указать параметр (имя отношения), а затем использовать его в своем промежуточном программном обеспечении, таком как этот веб. php

Route::get('shipings/{user}', 'GetShipingController@index')->middleware('relation:addresses');

и промежуточное программное обеспечение

public function handle($request, Closure $next, $relation)
{
    if (!$request->user()->{$relation}()->count()) {
        return redirect('shipping');
    }

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