【未解決】登録処理がうまくいかない
- こんなデータがあります
$kinds = array('みけ','さば','とら','はちわれ','くろ');
- これをその他の要素とまとめてやります
//動物種類(kind)ごとにデータをまとめる $inputData = []; foreach($kinds as $value) { $item = array( 'kind'=>$value, 'birthday'=>date('Y-m-d H:i:s'), ); array_push($inputData,$item); } //登録処理 for($i = 0; $i < count($inputData); $i++){ DB::insert([ 'kind'=>$inputData[$i]['kind'], 'birthday'=>$inputData[$i]['birthday'], ]); }
実行します
デデドン!(エラー)
(/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php) "ksort() expects parameter 1 to be array, string given"
🙂💭
原因わからず。どうしようもなく。
配列の渡し方とかが悪いんだろうけど今回は諦めます。わかる人教えてください。
テーブルの指定がないです。
— たべたつ (@ttabtt3) 2018年5月18日
DB::table(‘$テーブル’)->insert()じゃないですかね?
いやこれforeachでバラした(string)valueをksort()してますね。
— Masaki🍭Webエンジニア (@plus_one_masaki) 2018年5月18日
ksort()の引数はarrayしか受け付けない系エラーです。
コードを読み直したところ、$inputData[$i]['kind']としてるのを、$inputData[$i]にしたら行けそうな気がします。
— Masaki🍭Webエンジニア (@plus_one_masaki) 2018年5月18日
array to string conversionってのがでました。
— 🥦あじちゃん🐈求職中 (@anya_an1) 2018年5月18日
たぶん、挿入する値がどのキーに紐付いてるか指定したいのがまずいんじゃないかと思いました……むん。。
手元で実行してみると、こんな感じです。 pic.twitter.com/8DUpOzzC7R
— たべたつ (@ttabtt3) 2018年5月18日
これ、実際のコードだとコントローラで呼び出したDBクラスからの呼び出しでなく、モデルで呼び出したDBクラスのメソッドを使ってるのでその設定がまずかったりするかもです…
— 🥦あじちゃん🐈求職中 (@anya_an1) 2018年5月18日
トランザクションも似たような環境で失敗してしまってて。
use DB
— たべたつ (@ttabtt3) 2018年5月18日
してあげてれば、controllerでもmodelでも同じ設定でDBファサードが使えるのでそれはないかと思いますよ😀
ふーむ🤔なるほどです。
— 🥦あじちゃん🐈求職中 (@anya_an1) 2018年5月18日
書き方を変えるとふつーにインサートできてるのでテーブル指定が書かれてるモデルを経由してないせいでテーブル設定がないことになってるのかなと思っちゃいました。