※とある駆け出し未熟者エンジニアの備忘録です。
例えば、新規書籍登録という機能があったとします。
本の情報、在庫の情報という二つのテーブルを用意します。
本のテーブル=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に情報が反映できるかと思います。