我有一个包含用户实体的 laravel 命令。我写了一个迁移来修改用户表。运行 php artisan migrate 时,我收到错误,因为用户实体与数据库不匹配(因为此迁移将进行这些更改)。
我怀疑这意味着 migrate 命令的过程包括设置 laravel 命令。有没有办法可以运行 php artisan migrate 而 laravel 命令代码不运行?
我正在运行 laravel 5.1 和 php 7.1。
编辑:
我没有发布任何代码,因为它甚至没有进行迁移。这是错误消息(命令是 php artisan migrate)。
这可能会有帮助。这是导致错误的 laravel 命令类。我可以将其注释掉,并且迁移运行良好。不过,这对于生产来说会很烦人。
$userRepo = $repositoryFactory->getRepository(User::class);
$this->defaultUser = $userRepo->find(3000);
Run Code Online (Sandbox Code Playgroud)
我只是想我还应该包含 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)
Run Code Online (Sandbox Code Playgroud)
小智 41
根据Laravel 8 文档,在重命名列/表之前,请确保您已通过 Composer 包管理器安装了doctrine/dbal库。
请运行composer require doctrine/dbal安装
我想出了一个不错的解决办法。我不知道描述它的正确术语,但是查看堆栈跟踪,laravel 在 php artisan 命令期间设置了容器。其中包括 laravel 命令的容器。
$this->defaultUser = $userRepo->find(3000) 行位于构造函数中,这意味着它在设置容器时运行。这会导致错误,因为用户的数据库与用户的应用程序设置不匹配(因为迁移尚未运行)。
我将该行移至 getter 函数,并在其中设置默认用户(如果它为空),这在设置容器时不会使用。
| 归档时间: |
|
| 查看次数: |
9599 次 |
| 最近记录: |