我對Laravel,Eloquent和Artisan還是比較陌生的。 我想要做的事情很簡單:我想創建一個新的Eloquent模型關於我們,以及一個遷移文件來創建表about_us。Laravel:重命名數據庫表格中斷功能
我運行下面的命令:
PHP artisan make:model AboutUs -m
這產生了模型和遷移文件,但是,遷移文件被命名爲「2017_07_18_211959_create_about_uses_table.php」,自動添加不必要的「ES」到「我們」,並創建一個'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
數據庫表 '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_classmap和autoload_static文件中仍然存在對「aboutuses」的引用。手動更改此不解決這個問題,也沒有運行:
composer dump autoload
接下來,我想根本就沒有重命名錶,但運行遷移創建初始「aboutuses」表。這固定了功能,因爲模型現在可以正常工作。但是,如果我現在增加一個新的遷移有:
Schema::rename('aboutuses', 'about_us');
這將重命名錶中的DB,但不是在自動加載文件或任何其他地方,造成斷功能。
當然必須有一個更簡單的方法之一:
- 創建一個與固定名稱遷移文件的模型,而不是它 自動通過添加不必要的後綴更改名稱。
- 重命名模型並更改必要的文件以防止模型 中斷。
在我對此失去理智之前,有誰能指出我正確的方向嗎? :)
你有沒有嘗試在相關模型中使用正確的表名?如果你仍然在開發數據庫中,我會簡單地刪除包括遷移表在內的所有表,建立正確的遷移文件。然後重新運行遷移,就像它第一次一樣 –
這是因爲默認情況下,雄辯是遵循表名的多個模型名稱。檢查@pehbehbeh ansewer。 – Tpojka
我儘可能多地假設,但不知道如何覆蓋它並選擇一個固定的名稱。謝謝! – Jort