我有一个包含用户实体的laravel命令。我编写了一个迁移来修改用户表。运行php artisan迁移时,出现错误,因为用户实体与数据库不匹配(因为此迁移将进行这些更改)。
我怀疑这意味着migration命令的过程包括设置laravel命令。有没有一种方法可以运行php artisan migration并且laravel命令代码无法运行?
我正在运行laravel 5.1和php 7.1。
编辑:
我没有发布任何代码,因为它甚至还没有进行迁移。这是错误消息(命令是php artisan migration)。
这可能很有帮助。这是在导致错误的laravel命令类中。我可以将其注释掉,并且迁移运行良好。但这对于生产来说很烦人。
$userRepo = $repositoryFactory->getRepository(User::class);
$this->defaultUser = $userRepo->find(3000);
我只是想我也应该在laravel日志文件中包含此错误的一部分堆栈跟踪。
#0 /project-path/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php(176): Doctrine\DBAL\Driver\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\DBAL\Driver\PDOException))
#1 /project-path/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php(150): Doctrine\DBAL\DBALException::wrapException(Object(Doctrine\DBAL\Driver\PDOMySql\Driver), Object(Doctrine\DBAL\Driver\PDOException), 'An exception oc...')
#2 /project-path/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(915): Doctrine\DBAL\DBALException::driverExceptionDuringQuery(Object(Doctrine\DBAL\Driver\PDOMySql\Driver), Object(Doctrine\DBAL\Driver\PDOException), 'SELECT t0.user_...', Array)
#3 /project-path/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(712): Doctrine\DBAL\Connection->executeQuery('SELECT t0.user_...', Array, Array)
#4 /project-path/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(730): Doctrine\ORM\Persisters\Entity\BasicEntityPersister->load(Array, NULL)
#5 /project-path/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(462): Doctrine\ORM\Persisters\Entity\BasicEntityPersister->loadById(Array)
#6 /project-path/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php(154): Doctrine\ORM\EntityManager->find('...', Array, NULL, NULL)
#7 /project-path/Emailer.php(53): Doctrine\ORM\EntityRepository->find(3000)
#8 /project-path/QuoteStaleEmailer.php(25): Emailer->__construct(...)
#9 [internal function]: QuoteStaleEmailer->__construct(...)
#10 /project-path/vendor/laravel/framework/src/Illuminate/Container/Container.php(780): ReflectionClass->newInstanceArgs(Array)
#11 /project-path/vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('...', Array)
#12 /project-path/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(674): Illuminate\Container\Container->make('Servi...', Array)
答案 0 :(得分:0)
我想出了一个不错的解决方法。我不知道描述它的正确术语,但是在堆栈跟踪中,laravel在php artisan命令期间设置了容器。其中包括用于laravel命令的容器。
$ this-> defaultUser = $ userRepo-> find(3000)行在构造函数中,这意味着它在设置容器时运行。这会导致错误,因为用户数据库与用户的应用程序设置不匹配(因为迁移尚未运行)。
我将该行移到了getter函数,并在默认用户为空的情况下在那里设置了默认用户,这在设置容器时不会使用。