【问题标题】:Laravel relationship across multiple tables fails跨多个表的 Laravel 关系失败
【发布时间】:2018-10-26 01:54:50
【问题描述】:

我有以下表格

表格检查

 id
 name ...

表设置类型

id
name
level //references id on table check

标签设置

type, //references type on table setting type
name
value

所以基本上我想用设置返回所有检查

所以我的模型中有

1.Check model //引用表检查

    public function settingsval(){
       return $this->hasMany('App\AppSettingTypes','name','name.setting');
   }

在我的 AppSettingTypes // 引用表设置类型

    public function settings(){
       return $this->hasMany('App\AppSetting','id','type');
   }

所以我的控制器上只是在做

CheckModel::with('settingsval')

但每次设置数组都是空的,即使有数据

可能出了什么问题?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    如果表setting typelevel 列包含对检查表的引用,那么您的映射将类似于

    public function settingsval(){
       return $this->hasMany('App\AppSettingTypes','level','id');
    }
    

    有很多定义

    hasMany($related, $foreignKey, $localKey)
    

    如果您可以为相关列使用更好的命名约定,例如 check_id 而不是 level 等等,那就更好了

    【讨论】:

    • CheckModel::with('settingsval') 现在给我应用设置类型,但我现在想获取设置而不是应用设置类型
    • @GEOFFREYMWANGI 如果您还需要设置,请将您的with 部分更新为CheckModel::with('settingsval.settingsval')
    【解决方案2】:

    如果表setting typelevel 列包含对检查表的引用,那么您的映射将是

    public function settingsval(){
       return $this->belongsTo('YourCheckModelname','level');
    }
    

    并且在表check 模型中具有类似的映射

    public function settingtype(){
           return $this->hasMany(\App\AppSettingTypes::class);
        }
    

    同样,如果表 settingtype 列包含对设置类型表的引用,那么您的映射将是这样的

     public function settings(){
           return $this->belongsTo('YourSettingTypeModelname','type');
        }
    

    setting type 模型中有类似的映射

    public function settingsType(){
               return $this->hasMany('YourSettingModelName'::class);
            }
    

    然后你必须在你的控制器中做

    CheckModel::with('settingsval') //get all settingvalues
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 2019-06-23
      • 1970-01-01
      • 2022-10-21
      相关资源
      最近更新 更多