質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.40%

  • PHP

    24967questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    12185questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Laravel

    1181questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • foreach

    82questions

    foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

  • Eloquent

    70questions

    Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

laravelでupdate()をして更新すると値がNULLになる

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 71

machiren

score 5

前提・実現したいこと

勤怠システムの作成をしております。
laravelで複数レコードににupdateをかけたいです。
updateをすると入力した値が全てNULLになって更新されてしまいます。

発生している問題・エラーメッセージ

エラーなどは吐かれてなく、更新後がNULLになるので更新後を入力した値にしたいです。

該当のソースコード

<form action="/admin/update" method="POST" name="update">
        @method('PUT')
        @csrf
            <table id="management" class="table table-bordered ">
                <tr>
                    <th class='month'>{{$month->month}}</th>
                    <th colspan="3" style="text-align:center">平日</th>
                    <th colspan="2" style="text-align:center">休日</th>
                    <th colspan="6" style="text-align:center">勤怠</th>
                </tr>
                <tr>
                    <th>日付</th>
                    <!-- <th>曜日</th> -->
                    <th>始業時刻</th>
                    <th>終業時刻</th>
                    <th>休憩時間</th>
                    <th>休日</th>
                    <th>休日深夜</th>
                    <th>休暇</th>
                    <th>欠勤</th>
                    <th>遅刻</th>
                    <th>早退</th>
                    <th>休出</th>
                    <th>振休</th>
                </tr>
                @foreach($edit_list as $edit)
                <tr>
                    <td>{{$edit->calendar_id}}</td>
                    <td><input class="form-control" type="time" step="900" name="opening_time[{{$edit->id}}]" value="{{$edit->opening_time}}"></td>
                    <td><input class="form-control" type="time" step="900" name="ending_time[{{$edit->id}}]" value="{{$edit->ending_time}}"></td>
                    <td><input class="form-control" type="time" step="900" name="break_time[{{$edit->id}}]" value="{{$edit->break_time}}"></td>
                    <td><input class="form-control" type="time" step="900" name="holiday_time[{{$edit->id}}]" value="{{$edit->holiday_time}}"></td>
                    <td><input class="form-control" type="time" step="900" name="holiday_night[{{$edit->id}}]" value="{{$edit->holiday_night}}"></td>
                    <td>
                        <input type="hidden" name="holiday[{{$edit->id}}]" value="0">
                        <input type="checkbox" name="holiday[{{$edit->id}}]" value="{{($edit->holiday)}}">
                    </td>
                    <td>
                        <input type="hidden" name="adsence[{{$edit->id}}]" value="0">
                        <input type="checkbox" name="adsence[{{$edit->id}}]" value="{{($edit->adsence)}}">
                    </td>
                    <td>
                        <input type="hidden" name="late[{{$edit->id}}]" value="0">
                        <input type="checkbox" name="late[{{$edit->id}}]" value="{{($edit->late)}}">
                    </td>
                    <td>
                        <input type="hidden" name="leave_early[{{$edit->id}}]" value="0">
                        <input type="checkbox" name="leave_early[{{$edit->id}}]" value="{{($edit->leave_early)}}">
                    </td>
                    <td>
                        <input type="hidden" name="holiday_work[{{$edit->id}}]" value="0">
                        <input type="checkbox" name="holiday_work[{{$edit->id}}]" value="{{($edit->holiday_work)}}">
                    </td>
                    <td>
                        <input type="hidden" name="makeup_holiday[{{$edit->id}}]" value="0">
                        <input type="checkbox" name="makeup_holiday[{{$edit->id}}]" value="{{($edit->makeup_holiday)}}">
                    </td>
                </tr>
                <input type="hidden" name="id[{{$edit->id}}]" value="{{$edit->id}}">
                @endforeach
            </table>
                <div class="container mt-4 mb-5">
                    <div class="row">
                        <div class="col-3 offset-5">
                            <button type="submit" class="btn btn-lg btn-outline-success">更新</button>

該当のソースコード

public function update(Request $request){

      foreach($request->input('id') as $id){

      $update_culumn = [

        'opening_time' => $request->input('opening_time[$id]'),
        'ending_time' => $request->input('ending_time[$id]'),
        'break_time' => $request->input('break_time[$id]'),
        'holiday_time' => $request->input('holiday_time[$id]'),
        'holiday_night' => $request->input('holiday_night[$id]'),
        'holiday' => $request->input('holiday[$id]'),
        'adsence' => $request->input('adsence[$id]'),
        'late' => $request->input('late[$id]'),
        'leave_early' => $request->input('leave_early[$id]'),
        'holiday_work' => $request->input('holiday_work[$id]'),
        'makeup_holiday' => $request->input('makeup_holiday[$id]')];

      Management::where('id',$id)->update($update_culumn);

      }
        return redirect('/');
    }

該当のソースコード

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Management extends Model
{
    protected $fillable = [

        'opening_time','ending_time','break_time',
        'holiday_time','holiday_night','holiday',
        'adsence','late','leave_early','holiday_work',
        'makeup_holiday','project','memo','user_id',
        'month_id','calendar_id','created_at','updated_at','year'];


    public function user(){

      return $this->belongsTo(User::class);
    }

    public function month(){

      return $this->belongsTo(Month::class);
    }
}

試したこと

dd()でデバッグして$requestには期待した値が入っていることを確認しています。
$update_culumnをdd()すると中はNULLになっていて空の状態でupdateが
かかっていることまで把握しています。

補足情報(FW/ツールのバージョンなど)

php 7.3.6  laravel 5.8 

初学者なため質問の意図や情報が足りない場合がありますので
遠慮なく仰っていただけると嬉しいです。
申し訳ありませんがご教示願います...

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yambejp

    2019/07/11 22:27

    RDBのテーブル構造と、どういったSQL文を投げているか理解する必要があります
    laravelへ落とし込むのはその後です

    キャンセル

  • machiren

    2019/07/11 22:53

    それは私の文字足らずで質問の意図が伝わってないということですか?情報が足りないのでしょうか?
    SQL文でidを指定できていてテーブルも適切な設定でした。
    私は$update_culumnに入る$requestの->input()の値がなぜ取れてこないのかが
    知りたいです。htmlのname属性でidの値を持たせてcontrollerでもinput(opening_time[$id])
    のように同じidをキーとして指定すると値が取得できるのかなという考えです。ちなみに
    [$id]を外すと連想配列としては取得できます。キーがあるとNULLになってしまいます。

    キャンセル

  • mts10806

    2019/07/12 06:20

    Managementモデルクラスのコードもご提示ください

    キャンセル

  • machiren

    2019/07/12 09:42

    mtsさん追加しました。

    キャンセル

回答 3

+1

Laravel Eloquentで、createやupdateメソッドなどで配列による値の一括代入を行う場合は、モデルのプロパティの$fillableか$guardedが適切に設定されているか確認してみてください。

Laravel 5.8 Eloquent:利用の開始

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/12 09:47

    aro10さん 回答ありがとうございます。
    先にcreateの方は作成していて$filableは設定しております。

    キャンセル

+1

'opening_time[$id]'

シングルクォートの中では変数は展開されません。

$id = "1";
echo $id;
echo '$id';
echo "$id";
echo "{$id}";

[]という文字列で囲われているので{$id}の形式を採用されたほうが良さそうですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/12 10:40

    いえ、いつも回答をくれて助かっております。御回答ありがとうございました。

    キャンセル

  • 2019/07/12 10:42

    解決されたようで何よりです。
    今回のはじまりとしては「変数の展開」という基礎部分でつまずいていたことは認識してもらえたらと。

    キャンセル

  • 2019/07/12 10:58

    基礎をスルーしてる部分が多々あると自分でも認識しております。
    「変数の展開」について基礎部分の穴埋めをしていこうと思います。

    キャンセル

check解決した方法

0

'opening_time' => $request->input("opening_time")[$id]のようにすると解決しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.40%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    24967questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    12185questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Laravel

    1181questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • foreach

    82questions

    foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

  • Eloquent

    70questions

    Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。