初めまして、エンジニアのIです。
私は7月1日にみんなシステムズに入社しました。
以前は工場の現場作業を担当していました。
未経験での入社だった私ですがここに至るまでに、オンラインスクールでRailsを5ヶ月学び、
その後ポートフォリをを作成し転職活動2ヶ月半を経て何とか内定を頂くことができました。
そんな私ですが以前はRailsで学習をしていましたので
Laravel歴は3ヶ月ちょっとで日々苦労をしております。
中でもこれはLaravelに限った話ではないのですがSQLに苦戦しております…
なので今回はアウトプットも兼ねてこの場を借りて最近覚えた事を書いてみようと思います。
前置き
ClassRoomモデル
カラム:id, name
Studentモデル
カラム:id, class_room_id, name
Profileモデル
カラム:id, student_id, age, gender
この様な3つのテーブルを用意しました。
ClassRoomとStudentは一対多
StudentとProfileは一対一
となっています。
ClassRoomモデルのidが1の物を取得する場合
$classRoom = ClassRoom::where("id", 1)->first();
dd($classRoom);
至って普通ですがこの様に取得できます。findでも問題ないです。
この時に以下の様にした場合は
$classRoom = ClassRoom::where("id", 1);
dd($classRoom);
出力はこの様になります。
この状態ではモデルの中身を見る事ができません。
最近教えて頂いたのですがこの段階ではまだクエリが発行されていないのです。
なのでモデルも取得できていません。
$classRoom = ClassRoom::where("id", 1);
dd($classRoom->first());
とすれば先程の様に出力されます。
クエリのデバッグ方法
クエリのデバッグについても教えて頂いたので書いていこうと思います。
先程のコードに
$classRoom = ClassRoom::where("id", 1);
dd($classRoom->toSql());
としてやると
どの様なクエリが発行されるか確認する事ができます。id = ?の部分はプリペアドステートメントという物です。説明は難しいので省きます…
次に先程の部分をgetBindingsに変えてみます。すると以下の様になります。
$classRoom = ClassRoom::where("id", 1);
dd($classRoom->getBindings);
これはクエリで検索する際に渡された値を確認する事ができます。
その他にクエリ中にdd()やdump()も使えるそうです。
そうすると上2つの値が同時に出力されて便利です。
ClassRoom::where("id", 1)->dd();
その他 ddの例
リレーションの事も書きたかったのですが長くなりそうなので今回はここまでにしておきます。
普段アウトプットは自分のメモくらいにしかしないので
この様にブログにするのは難しいと実感しました・・。
これからも解らない事は多いですが業務に励んでいこうと思います!