前提・実現したいこと
Eloquentのリレーションを使ってデータを取得したいのですのが、うまく取れずにいます。
projectsテーブル
+----+--------------+-----------------------+------------+-------+---------------------+---------------------+---------------------+ | id | organizer_id | place | min_member | level | open_at | created_at | updated_at | +----+--------------+-----------------------+------------+-------+---------------------+---------------------+---------------------+ | 1 | 1 | 体育館 | 2 | 1 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | | 2 | 2 | 小学校 | 6 | 2 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | | 3 | 3 | 消防署 | 4 | 3 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | +----+--------------+-----------------------+------------+-------+---------------------+---------------------+---------------------+
membersテーブル
| id | project_id | user_id | created_at | updated_at | +----+------------+---------+---------------------+---------------------+ | 1 | 1 | 1 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | | 2 | 2 | 1 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 | | 3 | 3 | 2 | 2020-08-11 07:07:44 | 2020-08-11 07:07:44 |
上記2テーブルからmembers
テーブルでuser_id=1
となっているproject_id
の詳細情報をprojectsテーブルから抽出したいです。
この場合、user_id=1
となっているproject_id
は1と2なので、体育館と小学校のレコードが対象となります。
試したこと
Member
モデルでbelongsTo
を使ってみました。
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Member extends Model 8{ 9 public function projects() 10 { 11 return $this->belongsTo('App\Project', 'project_id'); 12 } 13}
tinkerで動くには動くのですが、そもそもfind()
でmembersテーブルのidを指定しなくてはならないので、理想と異なります。
App\Member::find(1)->projects; => App\Project {#3865 id: 1, organizer_id: 1, place: "体育館", min_member: 2, level: 1, open_at: "2020-08-11 07:07:44", created_at: "2020-08-11 07:07:44", updated_at: "2020-08-11 07:07:44", }
イメージ的にはApp\Member::where('user_id', 1)->get()->projects;
の様にwhere
でuser_id
で条件をつけてからprojectテーブルの情報を結合したいのですが、こちらをtinkerで試すとエラーになりました。
なお、取得したデータはforeach
で一つずつ取り出してビューに一覧で表示したいと考えております。
アドバイスの程、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/22 22:59