laravel with嵌套的渴求式加載


今天在通過需求表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();

主要原因是學院上這一塊講的不是特別清楚,不知道后面的那個方法應該寫在哪個控制器中,所以出現了這么一個困擾萌新的問題~



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM