あじちゃんのブログ。備忘録。

〜SEもOLなんですかね?

トランザクション処理で詰まった

結論

トランザクション処理では外部で定義したの変数は指定して呼び出す必要がある.

詳細

ざっくり以下のような状態で実行すると...

$kinds = ['cat','dog','mouse'];

DB::transaction(function (){
    //格納データ配列の作成
    $data = [];
    foreach($kinds as $kind){
        array_push($data,[
            'kind'=>$kind,
            'createdAt'=>date('Y-m-d H:i:s'),
        ]);
    }

    //登録処理
    DB::insert($data);
});

このようなエラーメッセージが表示される.

//ERROR MESSAGE
Undefined variable: kind

引数の呼び出しが必要だったようで、以下のようにして解決。

$kinds = ['cat','dog','mouse'];

DB::transaction(function () use ($kind) {
    //...同処理...
}

🙁💭 このtransactionがメソッドでスコープが限定されてるものだってことを知らなかったせいで嵌ってしまった。基礎を知るis大切。一晩きちんと寝たら気づいたのでよかった。

参考