質問編集履歴

2

リレーションの命名規則に併せて修正。

2017/10/04 01:21

投稿

masaya_ohashi
masaya_ohashi

スコア9210

title CHANGED
File without changes
body CHANGED
@@ -96,7 +96,7 @@
96
96
  public function base() {
97
97
  return $this->morphMany(Base::class, 'ref');
98
98
  }
99
- public function image() {
99
+ public function images() {
100
100
  return $this->hasMany(Image::class);
101
101
  }
102
102
  }
@@ -104,8 +104,8 @@
104
104
 
105
105
  このあと、HogeのImageも欲しいので以下のようにwithを書き直すとエラーになります。
106
106
  ```php
107
- $base_list = Base::with(['ref', 'ref.image'])->all();
107
+ $base_list = Base::with(['ref', 'ref.images'])->all();
108
- // HogeにはImageがあるが、FugaにはImageのリレーションがないのでエラー
108
+ // Hogeにはimagesがあるが、Fugaにはimagesのリレーションがないのでエラー
109
109
  ```
110
110
 
111
111
  当たり前だ、と言われればそれまでなのですが、「あったら取る」「なければnull、またはプロパティ自体が無い」状態のデータが取得したいのです。なんとか方法はないでしょうか。
@@ -118,13 +118,13 @@
118
118
  public function base() {
119
119
  return $this->morphMany(Base::class, 'ref');
120
120
  }
121
- public function image() {
121
+ public function images() {
122
122
  return $this->hasMany(Image::class);
123
123
  }
124
- protected $appends = ['image'];
124
+ protected $appends = ['images'];
125
- public function getImageAttribute($value) {
125
+ public function getImagesAttribute($value) {
126
- return $this->image; // なぜかここでimageというattributeは無いとエラーになる。
126
+ return $this->images; // なぜかここでimagesというattributeは無いとエラーになる。
127
- // なお外部から$hoge->imageとアクセスした場合はエラーにならない
127
+ // なお外部から$hoge->imagesとアクセスした場合はエラーにならない
128
128
  }
129
129
  }
130
130
  ```

1

試したことの追記

2017/10/04 01:21

投稿

masaya_ohashi
masaya_ohashi

スコア9210

title CHANGED
File without changes
body CHANGED
@@ -108,4 +108,23 @@
108
108
  // HogeにはImageがあるが、FugaにはImageのリレーションがないのでエラー
109
109
  ```
110
110
 
111
- 当たり前だ、と言われればそれまでなのですが、「あったら取る」「なければnull、またはプロパティ自体が無い」状態のデータが取得したいのです。なんとか方法はないでしょうか。
111
+ 当たり前だ、と言われればそれまでなのですが、「あったら取る」「なければnull、またはプロパティ自体が無い」状態のデータが取得したいのです。なんとか方法はないでしょうか。
112
+
113
+ ### 試したこと
114
+ - Hogeモデルのappendsにimageを加え、getImageAttributeを実装する
115
+ ```php
116
+ class Hoge extends Model
117
+ {
118
+ public function base() {
119
+ return $this->morphMany(Base::class, 'ref');
120
+ }
121
+ public function image() {
122
+ return $this->hasMany(Image::class);
123
+ }
124
+ protected $appends = ['image'];
125
+ public function getImageAttribute($value) {
126
+ return $this->image; // なぜかここでimageというattributeは無いとエラーになる。
127
+ // なお外部から$hoge->imageとアクセスした場合はエラーにならない
128
+ }
129
+ }
130
+ ```