【问题标题】:How to retrieve Eloquent model with relationship after customized relationship自定义关系后如何检索具有关系的 Eloquent 模型
【发布时间】:2017-04-21 12:39:24
【问题描述】:

我有 2 个表,模型之间有自定义的 Eloquent 关系。与引用 Bankleverandor.fpid 的 Kredittkort.leverandor_id 的关系很直接

class Bankleverandor extends Model {
protected $primaryKey = 'fpid';
protected $guarded = [];
public function kredittkort() {
    return $this->hasMany("App\Kredittkort", 'leverandor_id', 'fpid');
}}

class Kredittkort extends Model {
protected $guarded    = [];
protected $primaryKey = 'fpid';
public function bankleverandor() {
    return $this->belongsTo("App\Bankleverandor", "leverandor_id", 'fpid');
}}

关系很好。例如

Kredittkort::find(258053)->bankleverandor;
Bankleverandor::find(441)->kredittkort;

给了我预期的结果,表明在 Eloquent ORM 中正确定义了关系。但是,使用“with”子句调用关系会引发异常

RelationNotFoundException in RelationNotFoundException.php line 20:Call to undefined relationship [\App\Bankleverandor] on model [App\Kredittkort].

我正在尝试按如下方式检索关系

Kredittkort::with(["\App\Bankleverandor" => function($q) {return $q->select("fpid,orgnr"); }]);

我想了解如何在上述情况下检索关系。如果还有其他推荐的方式,那么我也很想知道

【问题讨论】:

    标签: eloquent foreign-keys relationship laravel-5.4 laravel-eloquent


    【解决方案1】:

    我认为您正在寻找的是:

    Kredittkort::with(['bankleverandor' => function ($query) {
        $query->select('fpid','orgnr');
    }])->get();
    

    这里是文档的链接:Constraining Eager Loads

    【讨论】:

    • 感谢您的回答。我使用类的命名空间错误地加载了关系。
    【解决方案2】:

    对于那些面临类似问题的人。我使用相关类的完全限定名称错误地加载了关系。相反,我应该使用方法名称 (bankleverandor),我在其中定义了关系 belongsTo。

    错误用法:

    Kredittkort::with(["\App\Bankleverandor" => function($q) { return $q->select("fpid,orgnr"); }]);

    正确用法:

    Kredittkort::with(['bankleverandor' => function ($query) { $query->select('fpid','orgnr'); }])->get();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-21
      • 2023-04-01
      • 2019-08-24
      • 2018-03-01
      • 1970-01-01
      • 2019-09-20
      • 2015-10-29
      • 2016-02-26
      相关资源
      最近更新 更多