LoginSignup

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

php artisan migrateで構文エラーまたはアクセス違反で1103テーブル名が正しくないというエラーが出る

Q&AClosed

解決したいこと

マイグレーションファイルに購入履歴の番号を補完するカラムを追加してDBに反映させたい

例)
LaravelでECサイトのようなWebアプリをつくっています。
ショッピングカート機能の実装中にエラーが発生しました。
解決方法を教えて下さい。

発生している問題・エラー

1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name ''")

2  PDO::prepare("create table `` (`identifier` varchar(191) not null, `instance` varchar(191) not null, `content` longtext not null, `number` int null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'"

該当するソースコード

<2018_12_23_120000_create_shoppingcart_table.php>

class CreateShoppingcartTable extends Migration
{
    /**
     * Run the migrations.
     */
    public function up()
    {
        Schema::create(config('cart.database.table'), function (Blueprint $table) {
            $table->string('identifier');
            $table->string('instance');
            $table->longText('content');
            $table->integer('number')->nullable();
            $table->nullableTimestamps();

            $table->primary(['identifier', 'instance']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down()
    {
        Schema::drop(config('cart.database.table'));
    }
}

自分で試したこと

https://teratail.com/questions/304555
上記のサイトを確認したのですがテーブル名は変えない方がいいとの記事も見つけたので試してはいません。
テーブル名がいけないのか、コードの記述に誤りがあるのか判断が付きませんでした。
このエラーの原因に何か参考になる記事やサイトがあれば共有していただけると幸いです。

0

4Answer

create table `` (`identifier` varchar(191) not null, `instance` varchar(191) not null, `content` longtext not null, `number` int null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci'

作成するテーブル名が空になっています。

config('cart.database.table')

この結果が空なのだと思います。
普通に文字列で指定してはいかがですか?

0

$table->string('identifier');
$table->string('instance');
$table->longText('content');
$table->integer('number')->nullable();
$table->nullableTimestamps();

例('instance');この部分を文字列で実際に何か指定してみるってことでしょうか

0

作成するテーブル名が空になっています。

create table ``

この部分です。
ここは作成するテーブル名入り「create table `table_name`」のようになります。

テーブル名が空なので「Incorrect table name ''」というエラーが出ています。

config('cart.database.table')
この結果が空なのだと思います。

空なので実際は下記のようになっているのではないでしょうか。

Schema::create('', function (Blueprint $table) {
    /* 省略 */
});
0

Your answer might help someone💌