我对Laravel,Eloquent和Artisan来说还是一个新手。 我想要做的事情很简单:我想创建一个新的Eloquent模型AboutUs,以及一个用于创建about_us表的迁移文件。
我运行以下命令:
PHP artisan make:model AboutUs -m
这将生成模型和迁移文件,但是,迁移文件名为' 2017_07_18_211959_create_about_uses_table.php',自动添加不必要的'到我们这里,然后创建一个表格' aboutuses'而不是' 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');
}
}
这样的模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class AboutUs extends Model
{
protected $fillable = ['id', 'active', 'title', 'text'];
public static function getAboutUs()
{
return AboutUs::find(1);
}
public function postAboutUs($session, $active, $title, $text)
{
$aboutUs = $session->get('about_us');
array_push($aboutUs, ['active' => $active, 'title' => $title, 'text' => $text,]);
$session->put('about_us', $aboutUs);
}
}
然后运行迁移:
PHP artisan migrate
数据库表&#39; about_us&#39;是正确创建的,但是当我在表中插入一行并尝试使用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
我可以看到仍有人参考&#34; aboutuses&#34;在autoload_classmap和autoload_static文件中。手动更改此问题并不能解决问题,也无法运行:
composer dump autoload
接下来,我试图不重命名表,但是运行迁移来创建初始&#34; aboutuses&#34;表。这修复了功能,因为模型现在可以正常工作。但是,如果我现在添加一个新的迁移:
Schema::rename('aboutuses', 'about_us');
这会重命名数据库中的表,但不会在自动加载文件或其他任何位置重命名,从而导致功能损坏。
当然,必须有一种更简单的方法:
在我对此失去理智之前,有没有人能指出我正确的方向? :)
答案 0 :(得分:3)
您可以在Eloquent模型类中指定自定义表名。以下是文档中的示例:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'my_flights';
}
来源: https://laravel.com/docs/5.4/eloquent#eloquent-model-conventions
希望有所帮助。