1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

1回のPOSTで複数テーブルに情報を登録する方法

Last updated at Posted at 2021-12-31

※とある駆け出し未熟者エンジニアの備忘録です。

例えば、新規書籍登録という機能があったとします。
本の情報、在庫の情報という二つのテーブルを用意します。

本のテーブル=Books
在庫のテーブル=Stocks

Booksテーブルにuser_id、title、author、typeのカラムがあり、
Stocksテーブルにはbook_id、stockというカラムがあったとします。

登録を行う場合、BooksとStocksのカラムに情報を登録する場合は下記のようなコードで実行する事ができます。

BookController.php
public function store(Request $request){
        $book = new Book();
        $book->title = $request->title;
        $book->author = $request->author;
        $book->type = $request->type;
        $book->user_id = $request->user()->id;
        $book->save();

        $stock = new Stock();
        $stock->stock = $request->stock;
        $stock->book_id = $request->user()->id;
        $stock->save();
        return redirect('book/create');
    }

このようにBookクラスとStockクラスのインスタンスを作成する事で、1回のPOSTでそれぞれのテーブルに情報を登録する事ができます。

ちなみに
下記のようにfillableの設定がされているのであれば

Book.php
class Book extends Model
{
    protected $fillable = ['user_id', 'title', 'author', 'type'];
}

fillを使うとコードの量が減るので便利。

BookController.php
public function store(Request $request){
        $book = new Book();
        $book->fill($request->all());
        $book->save();

        $stock = new Stock();
        $stock->stock = $request->stock;
        $stock->book_id = $request->user()->id;
        $stock->save();
        return redirect('book/create');
    }

あとはweb.php側のルーティングで

web.php
Route::('/', BookController@store)->name('store');

view側では

〇〇blade.php
<form action="{{ route('store') }}" method="post">
@csrf
<button type="submit">登録</button>
</form>

このようなコードでDBに情報が反映できるかと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?