【问题标题】:how to terminate data losing in laravel migration如何终止laravel迁移中丢失的数据
【发布时间】:2017-08-06 08:58:24
【问题描述】:

我从来不知道为什么!但是当我在 phpMyAdmin 中查看我的数据库时,我的一张名为:Posts 的表被删除了!!!所以我尝试通过php artisan migrate 重新生成它,但我得到了这个错误:

[PDO异常]
SQLSTATE [42S01]:基表或视图已存在:1050 表“用户” 已经存在

我的 users 表只存在 Posts 表已被删除! 这是我的模型:

class Post extends Model
{
protected $table = 'posts';
public $primaryKey = 'id';
public $timestamps = true;

public function user()
{
    return $this->belongsTo('App\User');

}
}

和:

class User extends Authenticatable
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

public  function posts()
{

    return $this->hasMany('App\Post');
}

}

我必须在用户迁移中使用此命令:Schema::dropIfExists('users'); 并再次运行 php artisan migrate。除了我在用户表中的所有数据都被删除之外,所有事情都解决了!

如何在 laravel 中终止同样的问题?我如何在 laravel 迁移中disable data losing,如果某些更改导致它丢失数据,请提醒我。

在 microsoft EF 中,我们有 EnableDataLoosing=false; Eloquent 在 laravel 中有同样的东西吗?

【问题讨论】:

  • “删除表”意味着删除它,所以是的,您在该表中的数据将会丢失。我建议您创建仅数据转储或数据的 csv,然后在刷新迁移后使用 Seeder 重新填充表。
  • 只是我的建议,在生产中运行任何迁移之前备份您的数据库
  • 迁移表的状态如何?迁移运行后,不应再次运行。如果您不希望用户表创建代码运行 - 只需将其插入您的迁移表中。它不会运行。

标签: php mysql laravel eloquent laravel-eloquent


【解决方案1】:

在 Laravel 5.5 中有一个新命令 php artisan migrate:fresh 将删除所有表并全部重建它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-11
    • 2016-05-01
    • 2017-02-17
    • 2021-11-27
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多