質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

4082閲覧

Userテーブルの特定IDで所属するテーブルにて一致するIDの一覧を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/07/30 13:53

編集2017/07/30 15:39

したいこと:

各ユーザーがログインで入ったら、Userが持つjob_idに紐付く社員のみのプロファイルを表示させたいです。
誰か教えてください!

表示できなかったView ファイル下記です。

@if($users) @foreach($users as $user) <p>{{ $user->employee_job_offers->job_id }}</p> <p>{{ $employee->employee_id}}</p> <p>{{ $employee->gender}}</p> <p>{{ $employee->birth_on }} </p>

error:

Trying to get property of non-object (View: /vagrant/test/resources/views/home.blade.php)

説明:
データベース一つ:
テーブルは下記の四つ:
1,User
2,employee
3,employee_profiles
4,employee_job_offers

1,Userテーブル(ログインで入る)にJob_idがあります

select *from user; id | name | job_id

user Modleは下記です。

<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password','job_id', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; //Userに所属社員 public function employee(){ return $this->hasMany('App\employee')->orderBy('created_at', 'desc'); } //Userに所属社員のプロファイル public function employee_profiles(){ return $this->hasMany('App\employee_profiles')->orderBy('created_at', 'desc'); } //Userに所属社員の仕事内容をもつテーブル public function employee_job_offers(){ return $this->hasMany('App\employee_job_offers')->orderBy('created_at', 'desc'); } }

2,下記はemployeeテーブル

select

1id | name | employee_id
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Employee extends Model { public function employee_profiles(){ return $this->hasMany('App\employee_profiles')->orderBy('created_at', 'desc'); } }

3,下記はemployee_profilesテーブル

select

1id | employee_id | gender | birth_on
<?php namespace App; use Illuminate\Database\Eloquent\Model; class employee_profiles extends Model { public function employee_job_offers(){ return $this->hasMany('App\employee_job_offers')->orderBy('created_at', 'desc'); } }

4,下記はemployee_job_offersテーブル:

select

1id | employee_id | job_id
<?php namespace App; use Illuminate\Database\Eloquent\Model; class employee_job_offers extends Model { public function user(){ return $this->belongsTo('App\User'); } public function employee_profiles(){ return $this->belongsTo('App\Employee_profiles'); } }

UserController:

public function index() { $employee_profiles = Employee_profiles::all(); $employee = Employee::all(); $job_offers = Employee_job_offers::all(); return view('home',compact('employee_profiles','employee','job_offers')); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fagai

2017/07/30 15:19

ControllerからViewへはどのように追加をしていますか? また、@foreach($users-> as $user)の->は記述ミスですかね・・・?
退会済みユーザー

退会済みユーザー

2017/07/30 15:30

ありがとうございます!!ここに書くときのミスです!!
退会済みユーザー

退会済みユーザー

2017/07/30 15:31

controllerを追加しました。宜しくお願いします
guest

回答1

0

ベストアンサー

テーブル設計がおかしいのと、リレーションの設定の書き方を理解していないように見えます。
簡単に教えられる範囲を超えてしまっているので、これであとは自分自身でできると嬉しいです・・・

まず、Userモデル。
Userモデルからemployeeやemployee_profilesは見れません。
理由はemployeeやemployee_profilesにはuser_idが含まれていないからです。
また、employee_job_offersテーブルへもhasManyとしているのでリレーションの設定を書く必要があります。

employeeテーブルにemployee_idは不要だとおもいます。idだけで事足ります。もしidをemployee_idという名前にしたいならModelに主キーの名前を書く必要があった気がします。
また、employee_profilesは1対1になると思いますので、hasOneとなるでしょう。

そして、employee_profilesモデルとemployee_job_offersモデル。LaravelではPSR-4という仕様にそっているため、クラス名やファイル名をアッパーキャメルケースで書く必要があります。(EmployeeProfilesとEmployeeJobOffers)

ほかにもhasManyやbelongsToがどう作用しているのかを把握できてない箇所が存在していますが省略します。ドキュメントを見てください。。。

そしてテーブルを修正すると以下で良いと思います。

usersテーブル(id, name, job_id) employeesテーブル(id, name) employee_profilesテーブル(id, employee_id, gender, birth_on) employee_job_offersテーブル(id, employee_id, job_id)

おそらく鬼門となるのは、employee_job_offersテーブルからどのようにしてuserとemployeeをつなげるかというところですね。
hasManyでuserからjob_idで紐付けて、ループさせると良いでしょう。

投稿2017/07/31 03:09

fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/31 06:31

ありがとうございます。 ご指摘で頑張って見ます。 困ったらまた質問させていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問