Laravel显示所有用户并检查是否属于Bans表

Laravel显示所有用户并检查是否属于Bans表,laravel,laravel-5,eloquent,laravel-5.8,Laravel,Laravel 5,Eloquent,Laravel 5.8,嗨,我在管理仪表板上工作 我想显示所有用户,并检查用户是否阻止从bans表获取有关ban的信息 im使用cybercog/laravel ban禁止用户 拉威尔5.8 所以我有两张桌子 用户表和禁止表 Bans表在名为:BANABLE_id的列中具有绑定用户的用户id 用户型号: namespace App; use Illuminate\Notifications\Notifiable; use Cog\Contracts\Ban\Bannable as BannableContract; u

嗨,我在管理仪表板上工作 我想显示所有用户,并检查用户是否阻止从bans表获取有关ban的信息 im使用cybercog/laravel ban禁止用户 拉威尔5.8

所以我有两张桌子 用户表和禁止表

Bans表在名为:BANABLE_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');
    }
}

禁止型号:

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');
    }
}

用户控制器:

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');
    }
}

用户模式:

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');
    }
}


如果使用了错误的关系,则应使用多态性。看看下面的链接。

大概是

用户模型

public function ban()
{
   return $this->morphOne('App\Ban', 'bannable');
}
Ban模型

public function bannable()
{
   return $this->morphTo();
}
获取控制器中的所有用户

定义

use App\User;
然后

然后,您可以foreach它并对每个对象调用ban()方法

foreach($users as $user)
{
//return associated ban model
$user->ban;
}
或者,为了获得更好的性能,请使用

User::with(ban)->get(); 
这大大减少了SQL调用的数量。它检索具有ban模型的所有用户。请看下面链接中的急切加载


希望有帮助。:)

很抱歉,我是laravel的新手,非常感谢,如何在控制器中获取并显示它?THX ban()方法不兼容,但它可以(应该)已经在Bannable trait中实现,请尝试在User::classlook中注释“ban”方法如果有ban()的话在trait中查看methodi注释了ban方法并运行它获取错误:使用未定义的常量ban-假定为“ban”(这将在PHP的未来版本中引发错误)