Learn or Die

生涯勉強。Macです。

MySQLへのデータ挿入時にエラーが出る

エラー

SQLSTATE[HY000]: General error: 1364 Field 'カラム名' doesn't have a default value

原因

NOT NULLのフィールドにNULLをInsertすることで発生するエラー。

対処法

  1. NULLにならないよう値を入れる
    エラーが出ているカラムにNULL以外をInsertする。

  2. 警告自体を無効化する
    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の中に「山田」が含まれている場合
}

参考サイト

qiita.com

スーパーグローバル$_SERVERを参照する

PHPの場合

PHPでサーバーネームを参照する場合は以下の書き方

<?php

$_SERVER['SERVER_NAME'];

Laravelの場合

Laravelの場合はヘルパ関数requestを使用して参照する。

<?php

// $_SERVER要素全て
request()->server;
// 要素を指定して参照
request()->server->get('SERVER_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');

もしくはルーティングに正規表現でバリデーションを付けるのも○。

グローバル変数

グローバル変数とは

グローバル変数とは、ファイル全体で有効な変数のことを指す。
ファイル内で定義されたグローバル変数は、ファイル内のどの関数からも呼び出して使うことが可能。
ファンクション内でグローバル変数を使うには、「global グローバル変数名」で使用できるようになる。

<?php

$sample = "グローバル変数";
function sample()
{
  global $sample;
  echo $sample;
}
sample();

参考サイト

techacademy.jp

クエリビルダーや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 '更新成功!';
}

参考サイト

kannokanno.hatenablog.com

リソースコントローラ

リソースコントローラとは

リソースコントローラを使うとアプリの基本的な操作であるCRUD(作成、一覧表示、編集、削除)などのアクションや、そのルーティングが自動的に作成される。

リソースコントローラ作成方法

以下のコマンドを実行

$ php artisan make:controller UsersController --resource

参考サイト

readouble.com