【问题标题】:How do I fix the problem when I try to use seeder in laravel?当我尝试在 laravel 中使用播种机时如何解决问题?
【发布时间】:2020-11-10 10:23:46
【问题描述】:

我正在尝试在我的 laravel 项目中添加一个超级用户。我有,但错误发生了。

The use statement with non-compound name 'SuperAdminSeeder' has no effect", "E:\github\LARAVEL\Deal-Ocean\database\seeds\DatabaseSeeder.php", ["E:\github\LARAVEL\Deal-Ocean\vendor\composer/../../database/seeds/DatabaseSeeder.php"]

SuperAdminSeeder.php

<?php

use App\Role;
use App\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class SuperAdminSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $role = Role::create(['name' => 'super_admin']);
        $user = User::create(['email' => 'imrulhasan273@email.com', 'imrulhasan' => bcrypt('secret')]);
        DB::table('role_user')->insert(['user_id' => $user->id, 'role_id' => $role->id]);
    }
}

在上面的查询中,我正在创建一个具有 id 名称和角色的超级用户。并在数据透视表中创建他们的 role_id 和 user_id。

DatabaseSeeder.php

<?php

use SuperAdminSeeder;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // $this->call(UserSeeder::class);
        $this->call(SuperAdminSeeder::class);
    }
}

【问题讨论】:

  • 删除use SuperAdminSeeder; 行,运行composer dumpautoload 以确保然后再试一次;)
  • 我猜,Migrations Seeders 不使用 PSR-4 自动加载。他们require 来自各个文件夹的文件。因此,您可以从顶部删除 use SuperAdminSeeder 语句。
  • 谢谢。这个问题解决了可能是..但是另一个异常来了“ PDOException::("SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value")” 这是我的角色表``` Schema ::create('roles', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('display_name'); $table->timestamps (); });```
  • 'imrulhasan' =&gt; bcrypt('secret') 应该是'password' =&gt; bcrypt('secret') 吗?你的表中有一个名为imrulhasan 的列吗?另外,您需要为您的用户添加一个name
  • 谢谢大家...问题解决了...谢谢大家

标签: php database laravel laravel-seeding


【解决方案1】:

您的DatabaseSeeder 不在专用命名空间中;它在全局命名空间中。因此,您不需要 use 任何其他也在全局命名空间中的类。

由于SuperAdminSeeder 也在全局命名空间中,所以DatabaseSeeder 中的use SuperAdminSeeder; 语句不会执行任何操作(除非导致错误)。

删除use SuperAdminSeeder; 语句。

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 2021-09-07
    • 2022-01-15
    • 2021-07-31
    • 2020-11-27
    • 2022-12-03
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多