開発環境
Laravel 5.6
分からないこと
Laravelを使用した掲示板プログラムを、こちらのサイトを参考にして作成しているのですが、
そこで行われている、テーブルのデータ操作方法が、ぼんやりと理解できるのですが明確に自分の中で言語化できません。
その方法を流用して機能を追加したいと考えているため、処理の流れを自分の中できちんと理解したいです。
具体的には、postsとcommentsという2つのテーブルがあり、
モデルであるPost.phpでは、
public function comments() { return $this->hasMany('App\Comment'); }
Comment.phpでは、
public function post() { return $this->belongsTo('App\Post'); }
という記述があります(「postsテーブルとcommentsテーブルが1対多の関係である」と定義していると思っています)
その上で、Controllerにて、postテーブルの値を取得し全件表示するために、
public function show($post_id) { $post = Post::findOrFail($post_id); return view('posts.show', [ 'post' => $post, ]); }
とやっています。
この時、$postの中には、postsテーブルの中身とcommentsテーブルの中身が全て格納されるのだろうと思うのですが、
なぜ2つのテーブルから一気にデータを取得できるのか、が上手く言語化できません。
$post = Post::findOrFail($post_id);
で、Postモデルを使用してpostsテーブルの値を取得している一方、Commentモデルを使用している様子がないのは、
先述のhasMany('App\Comment'); によって、PostモデルとCommentモデルが紐づいているのでCommentモデルをわざわざ使うことなくcommentsテーブルの値を取得できる、という理解で正しいでしょうか。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
また、postsテーブルの値を削除する関数が、
public function destroy($post_id) { $post = Post::findOrFail($post_id); \DB::transaction(function () use ($post) { $post->comments()->delete(); $post->delete(); }); return redirect()->route('top'); }
と定義されており、結果として、投稿データとそれに紐づくコメント全てがテーブルからdeleteされるのですが、
$post->comments()->delete();
の、comments()とは、Postモデルで定義されているcommentsメソッドのことでしょうか。
$postの値をcomments関数に渡して、deleteを実行している、ということでしょうか。ここが上手く言語化できません。
変数->関数 というアロー演算子の使い方は、公式ドキュメントでも見当たらず、他にサンプルがないので処理内容が分かりません。
長文になってしまい恐縮ですが、どなたかお時間のある方、サイトをご参照のうえ上記内容について、合っている/そうじゃない・正しくはこう、といったアドバイスいただけないでしょうか。
宜しくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/06 00:56 編集
2019/11/05 23:48
2019/11/06 00:57 編集
2019/11/06 01:16 編集
2019/11/06 13:58 編集
2019/11/07 08:44 編集
2019/11/07 06:15
2019/11/07 08:18