【问题标题】:Laravel seeder gives error. Class not foundLaravel 播种机给出错误。找不到类
【发布时间】:2014-12-08 08:06:29
【问题描述】:

我是 Laravel 的新手,我正在自学如何从登录表进行身份验证。我已经迁移并创建了表。现在,我正在尝试将数据播种到登录表中,但命令提示符不断给我错误,上面写着Fatal Error, class login not found,我不知道我错过了什么。所以任何人都可以帮助我。这是我拥有的代码,是的,我使用的是 Laravel 4.3

<?php
class loginTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('login')->delete();
        login::create(array(
            'username'  =>  'sanju',
            'password'  =>  Hash::make('sanju')
            ));
    }
}


?> 

【问题讨论】:

  • 尝试运行composer dumpautoload
  • 对不起,它对我不起作用。我之前试过
  • php composer.phar diagnose 的结果是什么,应该是composer dump-autoload 带连字符
  • 当我使用 composer.phar 函数时,它返回我:无法打开输入文件:composer.phar,我使用了 composer dump-autoload 方法,但它不起作用。对不起
  • 包含完整的错误消息将有助于人们准确追踪问题所在

标签: php sql laravel laravel-5 laravel-artisan


【解决方案1】:

编辑

现在我明白了,问题出在您的 login 类上(之前的问题格式化,确切的错误难以辨认)。你应该再看看你有login类的文件的名称是什么,类的名称是什么。约定是文件名应为Login.php(大写字母),类名也应为Login(大写字母)。您还应该检查您的 Login 类是哪个命名空间。如果它是在App 命名空间中定义的,你应该添加到你的LoginTableSeeder

use App\Login;

&lt;?php之后的下一行

所以基本上你的文件的开头应该是这样的:

<?php

    use App\Login;
    use Illuminate\Database\Seeder;

较早的答案

你没有解释确切的错误是什么(可能是Seeder类的错误)但是:

database/seeds/DatabaseSeeder.php 你应该像这样运行登录播种器:

$this->call('LoginTableSeeder');

你应该把database/seeds文件LoginTableSeeder.php以大写字母开头。

现在,您的文件 LoginTableSeeder.php 文件应如下所示:

<?php

use Illuminate\Database\Seeder;

class LoginTableSeeder extends Seeder
{
    public function run()
    {

        // your code goes here
    }
}

您需要在文件开头导入Seederuse,并且类名应以大写字母开头。

现在您应该运行composer dump-autoload,现在当您运行php artisan db:seed 时它会正常工作。

【讨论】:

  • 感谢您的回复。我错过了一件事。我以这种方式命名它 loginTableSeeder.php,是的,我修复了它,现在它看起来像这样,LoginTableSeeder.php。现在,这是我的 LoginTableSeeder.php 代码。 delete();登录::create(array('username' => 'sanju', 'password' => Hash::make('sanju') )); } } ?>,但是,它还没有修复。
  • @samhukiklsk 正如我所提到的,问题可能是找不到 Seeder 类您需要在 &lt;?php 之后在此文件中添加 use Illuminate\Database\Seeder; 行,就像我上面的代码一样
  • @samhukiklsk 我已经编辑了我的答案(答案在开头)
  • 文档很好,但是laravel的文档中没有提到这个错误。 laravel.com/docs/5.3/seeding 在我的 composer.json 文件中自动加载类已经存在并在其中设置数据库。只是运行 composer dump-autoload 为我工作
【解决方案2】:

只要跑 composer dump-autoload -o 让自动加载器获取新的类,因为 PSR-4 不会自动加载数据库文件夹。

【讨论】:

    【解决方案3】:

    您需要为该表创建一个 Eloquent 模型才能使用Login::create()。你可以用一个简单的工匠命令来做到这一点:

    $ php artisan generate:model Login

    这将在app/models 目录中生成一个新的 Eloquent 模型,应该如下所示。

    class Login extends Eloquent {
    
        protected $fillable = [];
        protected $table = 'login';
    
    }
    

    您的代码应该在那之后工作。如果它仍然不能确保你运行composer dump-autoload

    【讨论】:

    • 嘿,我有点接近你的。解决方案有效,但只有 50%,现在错误是未找到基表或视图。表 hariyali.logins,但我的表只是登录,所以登录从哪里来。多余的s来自
    • 将表名指定为 Eloquent 模型类protected $table = 'login'; 中的类属性。我已经更新了我的答案。
    • Eloquent 自动假定表名是您的模型名称的小写复数形式,因此在您的情况下,Login 模型名称意味着它将自动搜索 logins 表,除非您指定 @987654330 @ 模型的属性。您可以阅读Eloquent Docs 以更了解这些约定。
    • 好的,现在 80% 的问题已经解决,现在还有一个问题是未知列名“updated_at”,我需要在迁移文件中添加时间戳()吗?这个错误是关于
    • 是的,您可以将其添加到迁移中,但如果您不希望模型使用默认时间戳命名约定,也可以在模型类中添加 protected $timestamps = false;
    【解决方案4】:

    这对我有用

    composer dump-autoload -o 
    

    【讨论】:

    • 如果主机禁用了转义怎么办?
    【解决方案5】:

    我也有同样的问题,但是你可以通过添加你的命名空间来解决它:

    namespace yournamespace; 
    use App\Login;
    use Illuminate\Database\Seeder;
    

    【讨论】:

      【解决方案6】:

      我也遇到过同样的问题。就我而言,作曲家非常老,更新后一切正常。

      用命令更新作曲家:

      $ composer 自我更新

      希望它可以帮助其他人。

      【讨论】:

        【解决方案7】:

        你需要创建模型

        $ php artisan generate:model Login
        

        在你的播种器类中需要将use App\Models\Login; 添加到我的 loginTableSeeder 文件中。

        【讨论】:

          猜你喜欢
          • 2018-12-27
          • 2021-03-19
          • 2019-11-02
          • 2017-03-20
          • 2014-09-05
          • 2013-05-25
          • 2014-11-26
          • 1970-01-01
          相关资源
          最近更新 更多