Я получаю очень странную ошибку в 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
Класс напрямую копируется из вверять документация библиотеки:
<?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
После переключения драйвера кеша на redis проблема теперь решена. Теперь я понимаю, что это, вероятно, «таинственно» исправило и мой другой проект Laravel 5.5 (когда я переключил драйвер кеша на memcached). Похоже, ошибка с Laravel 5.5 и драйвером файлового кэша
Других решений пока нет …