Я получаю чрезвычайно странную ошибку в 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