今天在通過需求表A查詢場地類型表B,然後通過表B的場地類型id去查詢表C場地類型名的時候遇到了一個小的問題。 需求表A的欄位:id、user_id 、name等等; 中間表B的欄位:id、appeal_id、field_type_id; 場地類型表C的欄位:id、display_name等等; Ap ...
今天在通過需求表A查詢場地類型表B,然後通過表B的場地類型id去查詢表C場地類型名的時候遇到了一個小的問題。
需求表A的欄位:id、user_id 、name等等;
中間表B的欄位:id、appeal_id、field_type_id;
場地類型表C的欄位:id、display_name等等;
Appeal模型中:
public function appeal_field_type() {
return $this->hasMany('App\Models\AppealFieldType');
}
public function field_type() {
return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}
Appeal控制器中;
$result = Appeal::select('id','name')
->where('id',$id)
->with('appeal_field_type.field_type')
->first();
以上都是看了laravel學院的嵌套的渴求式載入,然後按照他上面說的方法,模仿著寫了一下,結果這個方法一直報錯,報“field_type”方法不存在,一開始琢磨不透,看了一遍右邊appeal模型,檢查過單詞有沒有寫錯,有沒有引入模型,等等,都檢查過了,我就覺得不對啊,我就是嚴格按照學院上寫的嵌套的渴求式載入,但是就是不對。後來,我想,既然appeal_field_type這個方法是通過關聯模型訪問的,那麼是不是他還是要通過AppealFieldType這個模型,去訪問field_type這個方法,果然,我把fiel_type方法寫到AppealFielType模型中,再去訪問的時候,成功~
最終成功的結果:
Appeal模型中:
public function appeal_field_type() {
return $this->hasMany('App\Models\AppealFieldType');
}
AppealFieldType模型中:
public function field_type() {
return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}
Appeal控制器中:
$result = Appeal::select('id','name')
->where('id',$id)
->with('appeal_field_type.field_type')
->first();
主要原因是學院上這一塊講的不是特別清楚,不知道後面的那個方法應該寫在哪個控制器中,所以出現了這麼一個困擾萌新的問題~