Это из-за Soft Deletes.Когда вы добавляете признак SoftDeletes в модель, он автоматически добавляет where users.deleted_at is null
ко всем запросам.Лучший способ обойти это - добавить withTrashed()
к вашему запросу в миграции B.
Для этого измените запрос в миграции B, чтобы он выглядел следующим образом.Это должно удалить часть, где он пытается получить доступ к несуществующему столбцу deleted_at
.Эта миграция, в конце концов, не знает, что вы хотите добавить мягкие удаления позже, поэтому имеет смысл иметь доступ ко всем пользователям, включая тех, которые были выброшены.
User::withTrashed()->chunk(100, function($users) {
foreach ($users as $user) {
$user->userModule()->create();
}
});
Вы всегда можете закомментировать SoftDeleteперед запуском миграции также следует учитывать особенности пользовательской модели, но это временное исправление, поскольку вам нужно будет объяснить это всем будущим разработчикам.Кроме того, иногда очень удобно запускать php artisan migrate:fresh
.Вам не нужно помнить, чтобы каждый раз комментировать черту, поэтому добавление withTrashed()
кажется мне наиболее желательным решением.
В качестве последнего замечания я настоятельно рекомендую НЕ добавление семян в ваши миграции.Миграции должны ONLY использоваться для изменений схемы.В подобных случаях я бы использовал консольную команду или комбинацию консольных команд.
Например, вы можете создать консольную команду, которая запускается с помощью php artisan check:user-modules
.Внутри этой команды вы можете иметь следующее, что создаст пользовательский модуль, только если он еще не существует.
User::chunk(100, function($users) {
foreach ($users as $user) {
if (!$user->userModule()->exists()) {
$user->userModule()->create();
}
}
});
Вы сможете запускать эту команду в любое время, так как она не будет перезаписывать существующий.пользовательские модули.