MySQLへのデータ挿入時にエラーが出る
エラー
SQLSTATE[HY000]: General error: 1364 Field 'カラム名' doesn't have a default value
原因
NOT NULLのフィールドにNULLをInsertすることで発生するエラー。
対処法
NULLにならないよう値を入れる
エラーが出ているカラムにNULL以外をInsertする。警告自体を無効化する
config/database.phpのstrictの値をfalseに設定する。
<?php 'mysql' => [ // 略 // 'strict' => true, 'strict' => false, // 略 ],
特定の文字列を含むかチェックする
正規表現を使わない場合
strops関数を使う。
strpos、strstr、preg_matchなどの中で最も高速でメモリ消費も少ない。
strposは、該当する文字列が見つからなかった場合は、falseを返す。
<?php $name = '山田 太郎'; if (strpos($name, '山田') !== false) { //$nameの中に「山田」が含まれている場合 }
正規表現を使う場合
preg_matchを使う。
preg_matchはマッチした場合は1を、マッチしなかった場合は0を返す。
<?php if(preg_match('/山田/', $name)) { //$nameの中に「山田」が含まれている場合 }
参考サイト
ルーティングの優先度について
事象
下記のようなルーティングで、/sample/showにアクセスすると404エラーが発生する。
<?php Route::get('/sample/{id}', 'SampleController@index'); Route::get('/sample/show', 'SampleController@show');
エラー原因
Laravelのルーティング設定では「上に書かれた設定が優先的に実行される」。
そのため、/sample/showにアクセスすると「/sample/{id}」の方のルーティングが実行され、エラーが発生してしまう。
対処方法
ルーティングを入れ替え優先度を変更する。
<?php Route::get('/sample/show', 'SampleController@show'); Route::get('/sample/{id}', 'SampleController@index');
もしくはルーティングに正規表現でバリデーションを付けるのも○。
クエリビルダーやEloquentを使ったupdateの戻り値
使用サンプル
<?php //Customerテーブル更新 $result_update = Customer::where([ 'no' => $this->ary_customer['customerNo'], 'del_flg' => 0 ]) ->first() ->update([ 'password' => $ary_request['newpass'], 'edit_date' => Carbon::now() ]); //->first()を付けることで 、更新成否で条件分岐ができる if($result_update){ echo '更新成功!'; }
参考サイト
リソースコントローラ
リソースコントローラとは
リソースコントローラを使うとアプリの基本的な操作であるCRUD(作成、一覧表示、編集、削除)などのアクションや、そのルーティングが自動的に作成される。
リソースコントローラ作成方法
以下のコマンドを実行
$ php artisan make:controller UsersController --resource