Laravel 中间件重定向 如果表为空



我正在尝试设置中间件,以防止用户访问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);
}

addresses()关系方法返回一个trueQueryBuilder。 我建议您改为使用聚合方法检查地址计数count.

if ($request()->user()->addresses()->count() == 0) {
return redirect('shipping');
}

如果你的中间件名称是 ex 的关系,那么你可以给出一个参数(关系名称(,然后在你的中间件中使用它,就像这样 网络.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);
}

相关内容

最新更新