zoukankan      html  css  js  c++  java
  • 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('AppModelsAppealFieldType');
    }
    public function field_type() {
    return $this->belongsTo('AppModelsFieldType')->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('AppModelsAppealFieldType');
    }

    AppealFieldType模型中:

    public function field_type() {
    return $this->belongsTo('AppModelsFieldType')->select('id','display_name');
    }

    Appeal控制器中:

    $result = Appeal::select('id','name')
    ->where('id',$id)
    ->with('appeal_field_type.field_type')
    ->first();

    主要原因是学院上这一块讲的不是特别清楚,不知道后面的那个方法应该写在哪个控制器中,所以出现了这么一个困扰萌新的问题~


  • 相关阅读:
    multiprocessing 源码解析 更新中......
    loadrunner 更新中......
    Java IO
    echarts水球图小数点不显示问题+组件默认值
    双柱表格组件
    表格生成后修改echarts图表样式
    vue中引入单张图片+两张壁纸手动切换
    配置全局组件
    vue使用babel-plugin-import按需引入Ant Design View + babel-plugin-component按需引入element-ui
    vue深浅拷贝的思索
  • 原文地址:https://www.cnblogs.com/x-x-j/p/7172046.html
Copyright © 2011-2022 走看看