Laravel:使用更新的迁移将列添加到表 - php

我正在尝试在一个迁移文件中迁移特定行。

例:

之前:

Schema::create('categories', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('category_name');
  $table->integer('parent_id')->nullable();
  $table->timestamps();
});

后:

Schema::create('categories', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('category_name');
  $table->string('img_url'); // ← new column
  $table->integer('parent_id')->nullable();
  $table->timestamps();
});

现在我只想迁移该行:$table->string('img_url');

可能吗?

参考方案

听起来您正在尝试向已通过迁移创建的表中添加一列。在这种情况下,您需要使用Schema::create(...)而不是使用Schema::table(...)

通常,您将为此创建一个新的迁移:

$ php artisan make:migration add_img_url_to_categories

它将在/database/migrations创建一个名为2019_10_21_165554_add_img_url_to_categories.php之类的新文件。然后将此代码添加到up()函数中:

public function up()
{
  Schema::table('categories', function (Blueprint $table) {
    $table->string('img_url');
  });
}

您还有另一个选择是完全按照您的要求编辑迁移(根据问题中的代码),然后运行:

$ php artisan migrate:fresh // drop all tables and re-run all migrations

要么

$ php artisan migrate:refresh // reset and re-run all migrations

但是请记住,这些都是破坏性操作,这意味着您将丢失数据库中已有的所有数据。在早期开发中,这可能并不重要。但是,您应该真正养成为数据库更改创建新迁移的习惯,而不是编辑现有迁移。

迁移的目的是使您(或使用您的应用程序的任何人)可以快速部署与您的应用程序期望的模式匹配的数据库。
在开发期间,在调整数据库架构以适应要开发的功能时,通常会编辑迁移。

但是,一旦部署或发布了应用程序,则应将所有迁移视为已锁定或只读。从那时起,任何数据库更改都应在新的迁移中完成。

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…

Laravel 5排序具有关系的雄辩模型 - php

我有一个要基于关系属性进行排序的模型。主模型Resultado具有类型respondente的关系belongsTo,而respondente具有关系usuario。我想获取具有这些关系的Resultado并按usuario name属性(列)对结果进行排序。我试过了$resultados = Diagnostico\Resultado::with(…

Laravel Nova自指关系 - php

在Laravel中,如果要创建自引用关系,可以执行以下操作:class Post extends Eloquent { public function parent() { return $this->belongsTo('Post', 'parent_id'); } public function childr…

检查对象是否已在集合中-Laravel - php

当我循环一系列不同的结果时,我希望将对象添加到新集合中。查询:$osRed = Item::where('category', 'Hardware') ->where(function ($query) { $query->where('operating_system', '…

Laravel @yield在刀片视图引擎的html标签中 - php

这可能吗?<html @yield( 'AngularNamespace' )> </html> 显然以上方法不起作用... 参考方案 这个对我有用。只要您的其他模板文件具有@section('AngularNamespace', 'NameSpaceHere')