Laravel Migration - Model::find($id)返回NULL,但$id在数据库中存在


Laravel Migration - Model::find($id) return NULL but $id exists in database

我有一个非常小的迁移奇怪的问题。

基本信息:我目前有我的项目的3个实例:"Dev PC"(离线),"开发笔记本电脑";(线下)和"QS"(在线)

所以最后两天我写了三个不同的迁移。一个是导入一个JSON文件,其中包含大约6000个模型实例的信息,并将这些模型写入数据库。

第二个(现在正在失败)应该向这些模型写入一些新数据,第三个将重写一些数据。

如果这是完美的不应该在这里讨论。那不介意!

所以这里是问题:第二次迁移在QS阶段失败,但在两个Dev阶段都工作。

这是第一个错误

-sh-4.2$ /opt/plesk/php/5.6/bin/php artisan migrate
**************************************
*     Application In Production!     *
**************************************
 Do you really wish to run this command? (yes/no) [no]:
 > yes

  [ErrorException]
  Creating default object from empty value

然后我试了一下

-sh-4.2$ /opt/plesk/php/5.6/bin/php artisan migrate --force --pretend -vvv
6219
  [ErrorException]
  Creating default object from empty value

Exception trace:
 () at /var/www/vhosts/database/migrations/2016_08_25_080129_import_old_adresses.php:28
 Illuminate'Foundation'Bootstrap'HandleExceptions->handleError() at n/a:n/a
 call_user_func() at /var/www/vhosts/vendor/sentry/sentry/lib/Raven/Breadcrumbs/ErrorHandler.php:36
 Raven_Breadcrumbs_ErrorHandler->handleError() at /var/www/vhosts/database/migrations/2016_08_25_080129_import_old_adresses.php:28
 ImportOldAdresses->up() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:319
 Illuminate'Database'Migrations'Migrator->Illuminate'Database'Migrations'{closure}() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Connection.php:656
 Illuminate'Database'Connection->pretend() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:320
 Illuminate'Database'Migrations'Migrator->getQueries() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:295
 Illuminate'Database'Migrations'Migrator->pretendToRun() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:144
 Illuminate'Database'Migrations'Migrator->runUp() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:117
 Illuminate'Database'Migrations'Migrator->runMigrationList() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:86
 Illuminate'Database'Migrations'Migrator->run() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:77
 Illuminate'Database'Console'Migrations'MigrateCommand->fire() at n/a:n/a
 call_user_func_array() at /var/www/vhosts/bootstrap/cache/compiled.php:1257
 Illuminate'Container'Container->call() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Console/Command.php:169
 Illuminate'Console'Command->execute() at /var/www/vhosts/vendor/symfony/console/Command/Command.php:256
 Symfony'Component'Console'Command'Command->run() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Console/Command.php:155
 Illuminate'Console'Command->run() at /var/www/vhosts/vendor/symfony/console/Application.php:794
 Symfony'Component'Console'Application->doRunCommand() at /var/www/vhosts/vendor/symfony/console/Application.php:186
 Symfony'Component'Console'Application->doRun() at /var/www/vhosts/vendor/symfony/console/Application.php:117
 Symfony'Component'Console'Application->run() at /var/www/vhosts/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:107
 Illuminate'Foundation'Console'Kernel->handle() at /var/www/vhosts/artisan:36

现在我想看看被触发的sql:

-sh-4.2$ /opt/plesk/php/5.6/bin/php artisan migrate --force --pretend -vvv
array:2 [
  0 => array:3 [
    "query" => "alter table `orders` add `oldName` varchar(255) not null, add `oldAdress` varchar(255) not null"
    "bindings" => []
    "time" => 0.0
  ]
  1 => array:3 [
    "query" => "select * from `orders` where `orders`.`id` = ? limit 1"
    "bindings" => array:1 [
      0 => 6219
    ]
    "time" => 0.0
  ]
]

现在这是混乱的,因为在DB上运行查询select * from orders where orders . id = 6219 limit 1直接导致1 Entry, Query took 0.0005 seconds.

那么我能做些什么来调试为什么laravel找不到我的DB条目?下面是迁移:

字符串("oldName");表->字符串("oldAdress");});//加载要导入的数据。$oldOrders = json_decode(File::get('storage/olddata.json'), TRUE);//更新。foreach ($oldOrders as $rawOrder) {美元订单= ' App '订单:找到(intval中($ rawOrder [' id ']));//这是第一次迭代时的崩溃。$order->oldName = $rawOrder['oldName'];$order->oldAdress = $rawOrder['oldAdress'];订单->保存();}}/* **反向迁移。** @return void*/公共函数down() {Schema::table('orders', function (Blueprint $table) {表-> dropColumn("oldName");表-> dropColumn("oldAdress");});}}

好吧,我实际上不知道第一次运行迁移时发生了什么,但是进一步的分析自己回答了问题。由于--pretend只是模拟查询,Order::find($id)不会返回任何东西。所以错误发生了。

我想了一遍又一遍,最后再次运行相同的命令(/opt/plesk/php/5.6/bin/php artisan migrate),它工作了。