Laravelを使用した顧客管理システムを作成しており、顧客ごとに訪問記録をつけようとしています。
訪問記録には訪問したスタッフを入力する必要があり、一人の場合もあれば複数人の場合もあります。
スタッフごとに自分の訪問記録も表示させたいので、訪問記録テーブル(visit_log)ととスタッフテーブル(staff)の多対多リレーション(visitlog_staff)を作成しました。
顧客の詳細ページにて訪問記録の一覧を表示させるために、顧客IDに紐づいた訪問記録をvisit_logから取得した後、visitlog_staffからvisit_log_idをもとにstaff_idを取得したいのですが、いまいちやりかたがわかりません。
なお、訪問記録を新規追加した際に、訪問スタッフに対応した中間テーブルへの保存は出来ています。
手書きのSQLで強引に取得することは可能ですが、フレームワークに沿った方法を教えていただきたい所存であります。
ご教授のほどよろしくお願いいたします。
環境とテーブル構成、関連ファイルは以下の通りです。
Laravel5.6
###visit_logs
id | client_id | visited_date |
---|---|---|
1 | 23 | 2019-01-03 |
2 | 23 | 2019-01-03 |
3 | 23 | 2019-01-03 |
4 | 23 | 2019-01-03 |
###staff
id | name |
---|---|
1 | 佐藤 |
2 | 田中 |
3 | 鈴木 |
###visitlog_staff
このテーブルのstaff_idをvisit_log_idをもとに取得したいです。
id | visit_log_id | staff_id |
---|---|---|
1 | 1 | 2 |
2 | 1 | 3 |
3 | 2 | 1 |
4 | 3 | 2 |
###VisitLog.php
namespace App; use Illuminate\Database\Eloquent\Model; class VisitLog extends Model { public function staff(){ return $this->belongsToMany('App\Staff', 'visitlog_staff', 'visit_log_id', 'staff_id'); } }
###Staff.php
namespace App; use Illuminate\Database\Eloquent\Model; class Staff extends Model { public function visitlogs(){ return $this->belongsToMany('App\VisitLog', 'visitlog_staff'); } }
###VisitLogController.php
訪問記録を追加する際に使用しています。
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\VisitLog; class VisitLogsController extends Controller { public function store(Request $request, \App\Client $oClient){ $visitlog = new VisitLog(); $visitlog->client_id = $oClient->id; $visitlog->visited_date = $request->visited_date; $visitlog->save(); $visitlog->staff()->attach($request->visitlog_staff); return redirect('/client/' . $oClient->id)->with('message', '訪問記録を追加しました'); } }
###ClientsController.php
showclientの引数にはclient_idが入ります
顧客ごとの訪問記録一覧はこのshowclientメソッド内で取得し、viewに渡したいのですがどう書けばいいのかわかりません。。。
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Client; use App\Staff; use App\VisitLog; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\DB; use App\Http\Requests\ClientRequest; use Illuminate\Support\Facades\Auth; class ClientsController extends Controller { public function showclient($id){ $oClient = Client::findOrFail($id); $oVisitLog = VisitLog::where('client_id', $id)->get(); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/31 11:05