Laravel:重命名数据库表会中断功能

Laravel:重命名数据库表会中断功能,laravel,model,eloquent,migration,laravel-artisan,Laravel,Model,Eloquent,Migration,Laravel Artisan,我对拉威尔还是个新手,能言善辩,手艺高超。 我想做的很简单:我想创建一个新的关于tus的雄辩模型,以及一个迁移文件来创建关于我们的表 我运行以下命令: PHP artisan make:model AboutUs -m 这将生成模型和迁移文件,但是,迁移文件名为“2017_07_18_211959_create_about_uses_table.php”,自动将不必要的“es”添加到“us”,并创建一个表“aboutus”,而不是“about_us”。 如果我手动更改迁移文件,如下所示: &l

我对拉威尔还是个新手,能言善辩,手艺高超。 我想做的很简单:我想创建一个新的关于tus的雄辩模型,以及一个迁移文件来创建关于我们的表

我运行以下命令:

PHP artisan make:model AboutUs -m
这将生成模型和迁移文件,但是,迁移文件名为“2017_07_18_211959_create_about_uses_table.php”,自动将不必要的“es”添加到“us”,并创建一个表“aboutus”,而不是“about_us”。 如果我手动更改迁移文件,如下所示:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAboutUsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('about_us', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
            $table->boolean('active');
            $table->string('title')->nullable();
            $table->text('text')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('about_us');
    }
}
数据库表“about_us”创建正确,但当我在表中插入一行并尝试使用getAboutUs时,它崩溃了,laravel.log声明:

local.ERROR: exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'ID226233_db.aboutuses' doesn't exist' in C:\PHP Projects\xxx\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConnection.php:77
我可以看到在autoload_类映射和autoload_静态文件中仍然有对“aboutuses”的引用。手动更改此选项不会解决此问题,运行:

composer dump autoload
接下来,我尝试不重命名该表,而是运行迁移来创建初始的“aboutuses”表。这修复了功能,因为模型现在可以正常工作。但是,如果我现在添加一个新迁移:

Schema::rename('aboutuses', 'about_us');
这会重命名数据库中的表,但不会重命名自动加载文件或其他任何地方的表,从而导致功能中断

当然,必须有一种更简单的方法:

  • 使用具有固定名称的迁移文件(而不是它)创建模型 通过添加不必要的后缀自动更改名称
  • 重命名模型并更改必要的文件以防止模型损坏 防止破碎

在我对这件事失去理智之前,有人能给我指出正确的方向吗?:)

您可以在雄辩的模型类中指定自定义表名。以下是文档中的示例:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'my_flights';
}

您可以在雄辩的模型类中指定自定义表名。以下是文档中的示例:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'my_flights';
}

您是否尝试在相关模型中使用正确的表名?如果您仍在开发数据库中,我只需删除所有表,包括迁移表,然后生成正确的迁移文件。然后重新运行迁移,就好像这是第一次,因为默认情况下,eloquent在表名后面是model name的复数形式。检查@pehbehbeh-ansewer。我也这么认为,但不知道如何覆盖它并选择一个固定的名称。谢谢您是否尝试在相关模型中使用正确的表名?如果您仍在开发数据库中,我只需删除所有表,包括迁移表,然后生成正确的迁移文件。然后重新运行迁移,就好像这是第一次,因为默认情况下,eloquent在表名后面是model name的复数形式。检查@pehbehbeh-ansewer。我也这么认为,但不知道如何覆盖它并选择一个固定的名称。谢谢很好,我不知道这个。我回家后会试试,但我相信这会管用的。非常感谢你!重命名数据库有什么缺点吗?以后会不会有雄辩的东西不起作用?很好,我不知道。我回家后会试试,但我相信这会管用的。非常感谢你!重命名数据库有什么缺点吗?雄辩的东西以后可能不管用吗?
<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'my_flights';
}