如何在自定义关系后检索具有关系的 Eloquent 模型

How to retrieve Eloquent model with relationship after customized relationship

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

的关系很直接
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"); }]);

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

我想你要找的是:

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

这是文档的 link:Constraining Eager Loads

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

错误用法:

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

正确用法:

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