###前提・実現したいこと
以下のようなテーブルがあるとします。
User
id | name |
---|---|
1 | aaa |
2 | bbb |
3 | ccc |
UserOwnership
id | user_id | owned_user_id |
---|---|---|
1 | 1 | 2 |
2 | 1 | 3 |
このテーブルはaaaというユーザの下にbbb、cccというユーザが子として紐付いていることを表現しようとしています。
###発生している問題・エラーメッセージ
Userのモデルから以下のように直接子のユーザを取れるようにしたいのですが、そのようにリレーションを書く方法がわかりません。そもそもこういうときどういう単語で調べるべきかわからずに困っています。
PHP
1$ownedUsers = $user->ownedUsers;// 子Userの配列
現状は子のUserの配列を得るためにこのような回りくどい方法を取っています。
PHP
1$userOwnerships = $user->userOwnerships; 2$ownedUsers = []; 3foreach($userOwnerships as $userOwnership) { 4 $ownedUsers[] = $userOwnership->ownedUser; 5}
###該当のソースコード
User
PHP
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class User extends Model 8{ 9 public function userOwnerships() { 10 return $this->hasMany('App\UserOwnership', 'user_id', 'id'); 11 } 12}
UserOwnership
PHP
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class UserOwnership extends Model 8{ 9 public function user() { 10 return $this->hasOne('users', 'id','user_id'); 11 } 12 public function ownedUser() { 13 return $this->hasOne('users', 'id','owned_user_id'); 14 } 15}
###試したこと
- Laravel 5.3 Eloquent:リレーションを一通り調べた
(追記) 読み直していたらHas Many Throughという項目があることに気付きました…検証します。
(追記の追記)Has Many Throughではだめでした。
###補足情報(言語/FW/ツール等のバージョンなど)
- Laravel 5.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/11 00:59