2

投稿が必要な数の言語を受け入れるようにする必要があるため、2 つのモデルpostlanguage 投稿モデルがあります。

public function languages(){
    return $this->belongsToMany(\App\Models\Language::class);
}

私の言語モデルでは:

public function posts()
{
    return $this->belongsToMany(\App\Models\Post::class);
}

移行後:

  Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->text('body');
        $table->boolean('puplished')->default(false);
        $table->bigInteger('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->timestamps();
    });

言語移行 :

Schema::create('languages', function (Blueprint $table) {
        $table->id();
        $table->string('text')->unique();
        $table->string('value');
        $table->timestamps();
    });

また、投稿と言語を接続するための post_language_table 移行も作成しました。

Schema::create('post_language', function (Blueprint $table) {
        $table->id();
        $table->unsignedInteger('post_id');
        $table->unsignedInteger('language_id');
        $table->timestamps();
    });

私のコントローラーで:

$langs = collect(json_decode($request->languages,true))->pluck('id');
    $post = [];
    $post['body'] = $request->body;
    $post['title'] = $request->title;
    $post['user_id'] = 1;
    $new_post = \App\Models\Post::create($post);
    $new_post->languages()->attach($langs);

しかし、データベースに新しいレコードを挿入しようとすると、次のエラーが表示されます。

Illuminate\Database\QueryException
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.language_post' doesn't exist (SQL: 
insert into `language_post` (`language_id`, `post_id`) values (1, 4), (3, 4), (4, 4))

問題は、何らかの理由でテーブル名が交換されていることです!

4

1 に答える 1