【发布时间】: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