Laravel 5 - 调用未定义的方法App \ Role :: firstOrCreate()

时间:2017-11-01 03:21:40

标签: php laravel laravel-5.5

当我尝试运行数据库种子时,我在Laravel 5.5中收到了一个非常奇怪的错误。当我运行php artisan db:seed --class=RoleSeeder时,我收到以下错误:

  

调用未定义的方法App \ Role :: firstOrCreate()

这是我的RoleSeeder课程:

<?php

use Illuminate\Database\Seeder;


class RoleSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {


        //Application User: All users have this role be default
        $r = \App\Role::firstOrCreate(['name'=>'app-user'],
            [
                'name'         => 'app-user',
                'display_name' => 'All users of the application',
                'description'  => 'Uses the application',
            ]
        );


    }
}

我在许多Laravel 5.4项目中多次使用此代码段而没有问题。我在另一个神秘地解决了自己的Laravel 5.5项目中发生了这个错误,但现在我无法弄清楚为什么在一个新项目上再次发生这种情况。

当我在laravel tinker(交互式php会话)中运行上面的代码片段时,它可以正常运行。

我已经验证了firstOrCreate函数的存在 vendor/laravel/src/Illuminate/Database/Eloquent/Builder.php

我的Role类直接从Entrust库文档中复制:

<?php namespace App;

use Zizaco\Entrust\EntrustRole;

class Role extends EntrustRole
{
}

当我将Role类更改为直接扩展Model时,db:seed命令运行正常。但是,Role扩展EntrustRole时会发生错误,其定义如下:

class EntrustRole extends Model implements EntrustRoleInterface
{
//..

我现在要实施一种解决方法,但是如果有人能够解释为什么这种方法在php artisan tinker中工作正常,而不是在作为播种机运行时,那就太好了。

修改 经过进一步调查,它似乎只是偶尔发生:

user@localmachine:/var/www/MyProject$ sudo php artisan cache:clear
Cache cleared successfully.
user@localmachine:/var/www/MyProject$ sudo php artisan db:seed
Seeding: RoleSeeder


  [BadMethodCallException]
  Call to undefined method App\Role::firstOrCreate()


user@localmachine:/var/www/MyProject$ sudo php artisan cache:clear
Cache cleared successfully.
user@localmachine:/var/www/MyProject$ sudo php artisan cache:clear
Cache cleared successfully.
user@localmachine:/var/www/MyProject$ sudo php artisan cache:clear
Cache cleared successfully.
user@localmachine:/var/www/MyProject$ sudo php artisan cache:clear
Cache cleared successfully.
user@localmachine:/var/www/MyProject$ sudo php artisan db:seed
Seeding: RoleSeeder
Seeding: UserSeeder

1 个答案:

答案 0 :(得分:0)

将缓存驱动程序切换到redis后,问题现在已解决。我现在意识到这可能是“神秘地”修复了我的另一个Laravel 5.5项目(当我将缓存驱动程序切换到memcached时)。看起来像是Laravel 5.5和文件缓存驱动程序的错误