1
/
5

Laravel ユーザー毎に記録を作成、表示できるように

こんにちは!Laravel勉強中のhirokinishizawaです!

このlaravel勉強ブログでは、はじめてversion minorをしてみたので前回から見て頂けると幸いです!(一気に.5上がってるのは内緒の方向でお願いします)

はじめに

今回は前回のブログで言っていたユーザー毎に釣りの記録を管理できるようにしました!(あと何もやってなかったスタイルも少しだけ笑)

ディレクトリについてしばらく書いていなかったので軽く書こうかと思います!

Model

User.php
Post.php

Controller

HomeController.php
PostsController.php

Views

resources
 └── views
├── auth
│ ├── passwords
│ │ ├── email.blade.php
│ │ └── resets.blade.php
│ └── login.blade.php
│ └── register.blade.php
├── layouts
│ └── app.blade.php
└── posts
│ ├── create.blade.php
│ ├── delete.blade.php
│ └── edit.blade.php
├── home.blade.php
└── welcome.blade.php

この中で今回のユーザー毎に表示や作成出来るようにするためにModelとControllerファイルを変更しました!

モデル

UserとPostsの関係は1対多と呼ばれる関係です!

ユーザーは複数の記録を保存できるので、Userは複数のPostを保存する
1つの記録の情報は1人しか存在しないのでPostは1つのUserしか持ちません!
上記の関係に基づき、各モデルにはこのように関数を追記しました!!(リレーション)

User.php

<?php
public function posts()
{
return $this->hasMany('App\Post');
}

Post.php

<?php
public function user()
{
return $this->belongsTo('App\User');
}

コントローラー

HomeController.php

<?php
public function index(Request $request)
{
$user = $request->user();
$posts = $user->load('posts');
return view('home', ['posts'=>$posts->posts]);
}

PostsController.php

<?php
public function create()
{
return view('posts.create');
}

public function edit(Post $post)
{
return view('posts.edit')->with('post', $post);
}

public function post(PostRequest $request)
{
$post = new Post();
$post->fish_name = $request->fish_name;
$post->year = $request->year;
$post->month = $request->month;
$post->day = $request->day;
$post->prefecture = $request->prefecture;
$post->place = $request->place;
$post->user_id = $request->user()->id;
$post->save();
return redirect('/home');
}

public function update(PostRequest $request, Post $post)
{
$post->fish_name = $request->fish_name;
$post->year = $request->year;
$post->month = $request->month;
$post->day = $request->day;
$post->prefecture = $request->prefecture;
$post->place = $request->place;
$post->save();
return redirect('/home');
}

public function delete(Request $request)
{
$post = Post::find($request->id);
return view('posts.delete')->with('post',$post);
}

public function remove(Request $request)
{
$post = Post::find($request->id);
$post->delete();
return redirect('/home');
}

実際に変更点があったのはpostだけになります。
user_idを取得するために$post->user_id = $request->user()->id;になっています!

躓いた点

リレーションと関係あるかはわからないですが、postをユーザー管理を出来るようにuser_idを作ってから送信しようとしたらUnknown column 'updated_at'というエラーが出てくるようになりました。
調べてみたところpublic $timestamps = false;でupdate_atを更新するのを回避できると書いてあったので試しにやってみたら次はcreated_atがないよーと怒られました。。。
postなのに作成日時はないとだめなのかな??

migrationファイルを見てみると作成した時からあるcreatedとmodifiedがありましたが、update_atはありませんでした。なのでcreatedとmodified($table->datetime('created');、$table->datetime('modified');)を削除してtimestamps($table->timestamps();)を入れることにより対応できました!

最後に

だんだんlaravelの内容が難しくなってきて、実装と文章にするのが難しくなってきましたーーー泣
分かりづらかったら申し訳ございません。

今は全てapp直下のmodelとcontrollerファイルだけを使って書いていますが何かほかのrepositoryファイルとかも使って作成していこうかと思います!

ありがとうございました!

絶賛エンジニアメンバーを募集しております!
ぜひ、弊社メンバーと一緒に『最高プルリクを』追い求めましょう!

フロントエンドエンジニア
最新技術で成長業界の波に乗りたいVue.jsフロントエンドエンジニア募集!
ROXXは「時代の転換点を創る」をビジョンに、2013年に設立。この先何十年も使い続けられるような社会的意義のあるサービスを目指し、現在はHR Techサービスを展開しています。 ■月額制リファレンスチェックサービス『back check』( https://backcheck.jp ) 書類選考や面接だけでは分からない採用候補者の経歴や実績に関する情報を、候補者の上司や同僚といった一緒に働いた経験のある第三者から取得することができる、オンライン完結型リファレンスチェックサービスです。back checkでは、採用予定の職種やポジションに合わせて数十問の質問を自動生成し、オンライン上で簡単にリファレンスチェックを実施できるだけでなく、低単価(※1)での実施が可能であることから、スタートアップから大手企業まで、採用人数やポジションに関わらず、幅広い企業に導入いただいています。2019年10月、正式リリース。2021年7月、累計リファレンスチェック実施人数1万人を突破。オンラインリファレンスサービスを利用した年間リファレンス実施人数No.1獲得(※2)。 ※1…従来のリファレンスチェックサービスと比べて1/10程度の価格。 ※2…商工リサーチ調べ(期間:2020年4月~2021年3月​) ■ 採用企業と人材紹介会社を繋ぐ、求人プラットフォーム『agent bank』(https://agent-bank.com/) 転職決定人数 No.1、掲載求人数 No.1、推薦人数 No.1(※1)のクラウド求人データベースです。「人材紹介会社」は、月額利用料のみで、サービス上に掲載されている約15,000件(※2)の求人に対して、自社で抱える転職希望者を掲載企業に紹介することが可能です。「求人企業」は、完全成功報酬型で募集求人を何件でも無料で掲載。『agent bank』導入中の人材紹介会社から、掲載求人に対して紹介が集まります。また、最大の特徴として、成功報酬を求人ごとに自由に設定いただけるため、従来の人材紹介よりも圧倒的に低コストで採用することが可能です。大手企業からベンチャー/スタートアップ企業まで、幅広い年収・業界・業種の求人が掲載されていることから、転職希望者に紹介できる案件を最大化できるだけでなく、過去の選考結果や業務内容に関する詳細情報が全て蓄積されており、効率だけでなく、紹介の質を大幅に向上することが可能です。 ※1…転職決定者数・推薦人数…東京商工リサーチ調べ(調査期間:2021年1月~12月) ※2…掲載求人数…調査対象に『agent bank + パーソルキャリア』掲載の求人数を含む。東京商工リサーチ調べ(調査期間:2022年4月11日〜15日)
株式会社ROXX
サーバーサイドエンジニア
Laravelでマーケット成長の波に乗りたいエンジニアを募集!
ROXXは「時代の転換点を創る」をビジョンに、2013年に設立。この先何十年も使い続けられるような社会的意義のあるサービスを目指し、現在はHR Techサービスを展開しています。 ■月額制リファレンスチェックサービス『back check』( https://backcheck.jp ) 書類選考や面接だけでは分からない採用候補者の経歴や実績に関する情報を、候補者の上司や同僚といった一緒に働いた経験のある第三者から取得することができる、オンライン完結型リファレンスチェックサービスです。back checkでは、採用予定の職種やポジションに合わせて数十問の質問を自動生成し、オンライン上で簡単にリファレンスチェックを実施できるだけでなく、低単価(※1)での実施が可能であることから、スタートアップから大手企業まで、採用人数やポジションに関わらず、幅広い企業に導入いただいています。2019年10月、正式リリース。2021年7月、累計リファレンスチェック実施人数1万人を突破。オンラインリファレンスサービスを利用した年間リファレンス実施人数No.1獲得(※2)。 ※1…従来のリファレンスチェックサービスと比べて1/10程度の価格。 ※2…商工リサーチ調べ(期間:2020年4月~2021年3月​) ■ 採用企業と人材紹介会社を繋ぐ、求人プラットフォーム『agent bank』(https://agent-bank.com/) 転職決定人数 No.1、掲載求人数 No.1、推薦人数 No.1(※1)のクラウド求人データベースです。「人材紹介会社」は、月額利用料のみで、サービス上に掲載されている約15,000件(※2)の求人に対して、自社で抱える転職希望者を掲載企業に紹介することが可能です。「求人企業」は、完全成功報酬型で募集求人を何件でも無料で掲載。『agent bank』導入中の人材紹介会社から、掲載求人に対して紹介が集まります。また、最大の特徴として、成功報酬を求人ごとに自由に設定いただけるため、従来の人材紹介よりも圧倒的に低コストで採用することが可能です。大手企業からベンチャー/スタートアップ企業まで、幅広い年収・業界・業種の求人が掲載されていることから、転職希望者に紹介できる案件を最大化できるだけでなく、過去の選考結果や業務内容に関する詳細情報が全て蓄積されており、効率だけでなく、紹介の質を大幅に向上することが可能です。 ※1…転職決定者数・推薦人数…東京商工リサーチ調べ(調査期間:2021年1月~12月) ※2…掲載求人数…調査対象に『agent bank + パーソルキャリア』掲載の求人数を含む。東京商工リサーチ調べ(調査期間:2022年4月11日〜15日)
株式会社ROXX
株式会社ROXXでは一緒に働く仲間を募集しています
1 いいね!
1 いいね!
同じタグの記事
今週のランキング