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

时间:2017-04-21 12:39:25

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

我有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中正确定义了关系。但是,使用"和"来调用关系。子句抛出异常

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"); }]);

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

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是:

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

以下是文档的链接:Constraining Eager Loads

答案 1 :(得分:0)

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

错误用法:

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

正确使用:

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