public function store(Request $request){ $request->validate([ 'sales_amt' => 'required|numeric', 'billing_date' => 'nullable|date', ]); $sales = new Sales(); $sales->sales_amt = $request->sales_amt; $sales->status = $request->status; $sales->billing_date = $request->billing_date ?? null; $sales->save(); return redirect('/sales'); }
コントローラ
public function store(Request $request){
$request->validate([
'sales_amt' => 'required|numeric', // 必須且つ、数値であること
'billing_date' => 'nullable|date', // 空を許容且つ、日付形式であること
],[
'sales_amt.required' => '販売額は必須ですよ',
'sales_amt.numeric' => '販売額は数字で入力してね。',
'billing_date.billing_date' => 'うーん。日付じゃないね',
]);
○○.blade.php
<!-- バリデーションエラーの表示 -->
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="POST" action="{{ url('test/update') }}">
@csrf
<input name="sales_amt" type="text" class="form-control" placeholder="売上額" value="{{old('sales_amt', $ent->sales_amt)}}">
<input name="billing_date" type="date" class="form-control" placeholder="請求日" value="{{old('billing_date', $ent->billing_date)}}" >
class TestController{ public function index(Request $request){ $client_name => $request->client_name, // 顧客名
class TestController{ public function index(Request $request){ $params = $request->all();
session(['test_key' => $testData]); // セッションにデータを書き込む
$testData = session('test_key');// セッションからデータを読取り
session()->forget('test_key'); // セッションから削除
session('test_key' ,$testData); // 誤ったやりかた
<a href="{{ url('animal/bark') }}">吠える</a> <a href="{{ asset('animal/bark') }}">吠える2</a>
<div>{{ ($errs['animal_name'] ?? '') }}</div>
@foreach ($items as $ent)
<tr data-item-id='{{$ent['item_id']}}'>
<td>インデックス:<span>$loop->index</span></td>
<td>{{$ent['name']}}</td>
<td>{{$ent['value']}}</td>
</tr>
@endforeach
// 基本的記述方法 id=12に該当するレコードがあればUPDATE、なければINSERTになる。第一引数と第二引数はマージされる。
$res = DB::table("clients")->updateOrInsert(
['id'=>12],
['client_name' => 'クバガサ製造株式会社テスト10']
);
dump($res);// 正常時はtrueが返ってくるのみ。
// idをnullにするとINSERTになる。
$res = DB::table("clients")->updateOrInsert(
['id'=>null], [
'client_name' => 'クバガサ製造株式会社テスト11',
]);
// 新規追加 第一引数を省略するとINSERTになる。
$res = DB::table("clients")->updateOrInsert(
'client_name' => 'クバガサ製造株式会社テスト11',
]);
//トランザクションにも対応
DB::beginTransaction();
$res = DB::table("clients")->updateOrInsert(
['id'=>null],
['client_name' => 'クバガサ製造株式会社テスト12',]
);
$res = DB::table("clients")->updateOrInsert(
['id'=>null],
['client_name' => 'クバガサ製造株式会社テスト13',]
);
DB::commit();
// DB::rollback();
//INSERTしたレコードのidを取得する方法。
DB::beginTransaction();
$res = DB::table("clients")->updateOrInsert(
['id'=>null],
['client_name' => 'クバガサ製造株式会社テスト12',]
);
$res = DB::getPdo()->lastInsertId(); // INSERTしたレコードのidを取得する。UPDATEの場合は0が取得されるので注意
dump($res);
DB::commit();
// DB::rollback(); // ロールバックしてもINSERTしたレコードのidは取得される。idは内部でインクリメントされているらしく、次にINSERTを試みるとidは+2になっている。
id = DB::getPdo()->lastInsertId();
誤り:間違えやすいパターン
//誤りパターン1。 一度に複数のレコードが登録できるわけではない。情報もないため複数行に恐らく対応していない。そもそも第一引数と第二引数にはそれぞれ意味がある
$res = DB::table("clients")->updateOrInsert(
['client_name' => 'クバガサ製造株式会社テスト4'],
['client_name' => 'クバガサ製造株式会社テスト5',]
);
//誤りパターン2。エンティティ内にidフィールドを含めただけではUPDATEにならない。 id=12のレコードがあってもUPDATEにならずINSERTになる。
$res = DB::table("clients")->updateOrInsert(
['id'=>12,'client_name' => 'クバガサ製造株式会社テスト5',]
);
// 誤りパターン3。よく似た機能であるupdateOrCreateメソッドではエラーになる。updateOrCreateはテーブル指定までできないようだ。
$res = DB::table("clients")->updateOrCreate(
['id'=>null],
['client_name' => 'クバガサ製造株式会社テスト12',]
);
$data = ¥DB::table('nekos')
->limit(5)->get();
foreach($data as $ent){
$ent->cat_master = 'ネコマスター';
}