Laravel Отображение всех пользователей и проверьте, принадлежат ли они к таблице банов - PullRequest
0 голосов
/ 17 марта 2020

Привет, я работаю над панелью администратора, и я хочу показать всем пользователям и проверить, не заблокирован ли пользователь, получить информацию о запрете из таблицы запретов, используя cybercog / laravel -ban , чтобы запретить пользователей Laravel 5.8

Таким образом, у меня есть две таблицы Users и таблица Bans

В таблице Bans есть идентификатор пользователя в виде полоски в столбце с именем: bannable_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');
    }
}

Я не смог найти схему банов, но это таблица банов:

Bans table

1 Ответ

1 голос
/ 17 марта 2020

вы используете неправильные отношения, вы должны использовать полиморф c. Смотрите ссылку ниже. https://laravel.com/docs/5.8/eloquent-relationships#one -to-one-polymorphi c -отношения

это будет что-то вроде

Модель пользователя

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

Ban Model

public function bannable()
{
   return $this->morphTo();
}

получить всех пользователей в контроллере

определить

use App\User;

затем

$users = User::all();

, затем вы можете вызвать его и вызвать ban () метод для каждого

foreach($users as $user)
{
//return associated ban model
$user->ban;
}

или для повышения производительности используйте

User::with(ban)->get(); 

, которые значительно уменьшают количество вызовов SQL. Получает всех пользователей с моделью бана. Посмотрите на готовую загрузку в ссылке ниже.

https://laravel.com/docs/5.8/eloquent-relationships#eager -загрузка

Надеюсь, это поможет. :)

...