Laravel 显示所有用户并检查是否属于 Bans table
Laravel Showing all users and check if belong to Bans table
嗨,我正在处理管理仪表板
我想显示所有用户并检查用户是否被阻止从禁令中获取有关禁令的信息 table
我正在使用 cybercog/laravel-ban 来禁止用户
Laravel 5.8
所以我有两个 table
用户 table 和禁止 table
Bans table 在名为 : bannable_id
的列中有带状用户的用户 ID
用户模型:
namespace App;
use Illuminate\Notifications\Notifiable;
use Cog\Contracts\Ban\Bannable as BannableContract;
use Cog\Laravel\Ban\Traits\Bannable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Verified;
class User extends Authenticatable implements MustVerifyEmail,BannableContract
{
use Notifiable;
use Bannable;
protected $fillable = [
'name', 'email', 'password',
'last_login_at',
'last_login_userganet',
'avatar','uid'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function UserBan()
{
return $this->hasOne('App\Ban','bannable_id');
}
禁止模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Ban extends Model
{
protected $fillable = [
'id','expired_at','bannable_type'
];
protected $casts = [
'bannable_type'
];
public function Users()
{
return $this->belongsTo('App\User');
}
}
用户控制器:
namespace App\Http\Controllers;
use App\User;
use App\Ban;
use App\Http\Requests\UserRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Cog\Contracts\Ban\Bannable;
class UserController extends Controller
{
/**
* Display a listing of the users
*
* @param \App\User $model
* @return \Illuminate\View\View
*/
public function index(User $model,Ban $banModel)
{
return view('users.index', ['users' => $model->paginate(15),'bans'=>$banModel->paginate(15)]);
}
用户架构:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->timestamp('last_login')->nullable();
$table->string('last_login_provider')->nullable();
$table->string('last_login_useragent')->nullable();
$table->string('last_login_ip')->nullable();
$table->string('uid')->nullable();
$table->string('password');
$table->string('avatar')->nullable();
$table->string('facebook_id')->unique()->nullable();
$table->string('google_id')->unique()->nullable();
$table->string('twitter_id')->unique()->nullable();
$table->string('instagram_id')->unique()->nullable();
$table->enum('user_type',['member','admin'])->default('member');
$table->boolean('blocked')->default(false);
$table->timestamp('banned_at')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
我找不到禁令模式,但这是禁令的 table :
你使用了错误的关系,你应该使用多态。看下面link。
https://laravel.com/docs/5.8/eloquent-relationships#one-to-one-polymorphic-relations
会是这样的
用户模型
public function ban()
{
return $this->morphOne('App\Ban', 'bannable');
}
禁止模型
public function bannable()
{
return $this->morphTo();
}
获取控制器中的所有用户
定义
use App\User;
然后
$users = User::all();
然后你可以 foreach 它并在每个
上调用 ban() 方法
foreach($users as $user)
{
//return associated ban model
$user->ban;
}
或者为了获得更好的性能,使用
User::with(ban)->get();
这大大减少了 SQL 调用的次数。它检索所有具有 ban 模型的用户。看看下面 link 中的预加载。
https://laravel.com/docs/5.8/eloquent-relationships#eager-loading
希望对您有所帮助。 :)
嗨,我正在处理管理仪表板 我想显示所有用户并检查用户是否被阻止从禁令中获取有关禁令的信息 table 我正在使用 cybercog/laravel-ban 来禁止用户 Laravel 5.8
所以我有两个 table 用户 table 和禁止 table
Bans table 在名为 : bannable_id
的列中有带状用户的用户 ID用户模型:
namespace App;
use Illuminate\Notifications\Notifiable;
use Cog\Contracts\Ban\Bannable as BannableContract;
use Cog\Laravel\Ban\Traits\Bannable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Verified;
class User extends Authenticatable implements MustVerifyEmail,BannableContract
{
use Notifiable;
use Bannable;
protected $fillable = [
'name', 'email', 'password',
'last_login_at',
'last_login_userganet',
'avatar','uid'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function UserBan()
{
return $this->hasOne('App\Ban','bannable_id');
}
禁止模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Ban extends Model
{
protected $fillable = [
'id','expired_at','bannable_type'
];
protected $casts = [
'bannable_type'
];
public function Users()
{
return $this->belongsTo('App\User');
}
}
用户控制器:
namespace App\Http\Controllers;
use App\User;
use App\Ban;
use App\Http\Requests\UserRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Cog\Contracts\Ban\Bannable;
class UserController extends Controller
{
/**
* Display a listing of the users
*
* @param \App\User $model
* @return \Illuminate\View\View
*/
public function index(User $model,Ban $banModel)
{
return view('users.index', ['users' => $model->paginate(15),'bans'=>$banModel->paginate(15)]);
}
用户架构:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->timestamp('last_login')->nullable();
$table->string('last_login_provider')->nullable();
$table->string('last_login_useragent')->nullable();
$table->string('last_login_ip')->nullable();
$table->string('uid')->nullable();
$table->string('password');
$table->string('avatar')->nullable();
$table->string('facebook_id')->unique()->nullable();
$table->string('google_id')->unique()->nullable();
$table->string('twitter_id')->unique()->nullable();
$table->string('instagram_id')->unique()->nullable();
$table->enum('user_type',['member','admin'])->default('member');
$table->boolean('blocked')->default(false);
$table->timestamp('banned_at')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
我找不到禁令模式,但这是禁令的 table :
你使用了错误的关系,你应该使用多态。看下面link。 https://laravel.com/docs/5.8/eloquent-relationships#one-to-one-polymorphic-relations
会是这样的
用户模型
public function ban()
{
return $this->morphOne('App\Ban', 'bannable');
}
禁止模型
public function bannable()
{
return $this->morphTo();
}
获取控制器中的所有用户
定义
use App\User;
然后
$users = User::all();
然后你可以 foreach 它并在每个
上调用 ban() 方法foreach($users as $user)
{
//return associated ban model
$user->ban;
}
或者为了获得更好的性能,使用
User::with(ban)->get();
这大大减少了 SQL 调用的次数。它检索所有具有 ban 模型的用户。看看下面 link 中的预加载。
https://laravel.com/docs/5.8/eloquent-relationships#eager-loading
希望对您有所帮助。 :)