こんばんは。
Laravelで個人サービスを開発しています。初心者です。
以下のコードは、ランキング表示用のテーブルに対して削除→新規データインサートする処理で、テスト環境では成功しています。
しかし、本番環境でどうしても1レコードのみ、"avg"(レビューの平均値)カラムにnullが入ってしまい、エラーとなります。
エラーとなる1レコードも、元データの条件はその他データと何ら変わらないように見え、対処法が定まらない状態です。
このようなエラーの場合の対象法について、有識者の方アドバイスいただけないでしょうか。
エラー画面
https://gyazo.com/6384bff7abc1b436ea7f397c6e9ea12a
※テスト環境=MYSql、本番環境=Postgresです。
//rankingsテーブルのデータを全て削除 \DB::select(\DB::raw("DELETE from rankings")); //rankingsテーブルにインサートしたいデータを取得 $rankingOrder = \DB::select(\DB::raw("select points.*, (select avg(review) from reviews where point_id = points.id) as avg from points order by avg desc;")); //$rankingOrderを1行ずつ取り出し、インサート foreach($rankingOrder as $insertRecord){ $dt = new Carbon(); Ranking::insert(["point_id" => $insertRecord->id, "area" => $insertRecord->area, "prefecture" => $insertRecord->prefecture, "belowPrefecture" => $insertRecord->belowPrefecture, "latitude" => $insertRecord->latitude, "longitude" => $insertRecord->longitude, "avg" => $insertRecord->avg, "created_at" => $dt, "updated_at" => $dt]); }
本番環境でSQL実行した際の結果は以下で、1レコード目(#2899)以外は全てのレコードに適切な値が入っています。
//rankingsテーブルにインサートしたいデータを取得 $rankingOrder = \DB::select(\DB::raw("select points.*, (select avg(review) from reviews where point_id = points.id) as avg from points order by avg desc;")); {#2899 +"id": 5, +"area": "近畿地方", +"prefecture": "奈良県", +"belowPrefecture": "奈良市雑司町-406−1", +"latitude": "34.6863903", +"longitude": "135.8404917", +"created_at": "2019-05-27 21:56:54", +"updated_at": "2019-05-27 21:56:54", +"avg": null, //ここがnullになります }, {#2895 +"id": 4, +"area": "中国地方", +"prefecture": "山口県", +"belowPrefecture": "長門市仙崎大日比", +"latitude": "34.4289566", +"longitude": "131.2221666", +"created_at": "2019-05-26 23:35:05", +"updated_at": "2019-05-26 23:35:05", +"avg": "5.0000000000000000", }, ~~~
現時点での対処として、nullとなるデータに何か問題があると思い、関連データを全てDBから削除したのですが、
本番でSQLを実行すると、何故か今でも#2899のデータが返ってきます。
"area": "近畿地方"などの情報はすでにDBから削除しているのですが、何故なのでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー