如何使用方法链接从Laravel Elount中的远程关系模型中检索数据?

如何使用方法链接从Laravel Elount中的远程关系模型中检索数据?,laravel,eloquent,laravel-5.4,Laravel,Eloquent,Laravel 5.4,我有模型A,B和C。A和B有一个关系,B和C有很多关系 //Model Code class A extends Model { //This relates A and B public function relateBC(){ return $this->hasOne('App\B','aid','aid'); } } class B extends Model { //Inverse relationship with Model

我有模型A,B和C。A和B有一个关系,B和C有很多关系

//Model Code

class A extends Model
{
    //This relates A and B
    public function relateBC(){
        return $this->hasOne('App\B','aid','aid');
    }
}

class B extends Model
{
    //Inverse relationship with Model A
    public function relateBC(){
        return $this->belongsTo('App\A','aid','aid');
    }

    //This relates B and C
    public function relateBC(){
        return $this->hasMany('App\C','bid','bid');
    }
}


class C extends Model
{
    //Inverse relationship with Model B
    public function post(){
        return $this->belongsTo('App\B','bid','bid');
    }
}
下面的代码从模型B返回数据

App\A::find(id)->relateAB()->get(); 
下面的代码从模型C返回数据

App\B:find(id)->relateBC()->get();        
下面的代码引发BadMethodException。方法relateBC()不存在

App\A::find(id)->relateAB->relateBC()->get();    

试试这个:

$distantRelations=App\A::find($id)->relateAB->relateBC;
当作为方法(即
->relateAB()
)访问时,您将返回(可以调用的对象
->get()
),而当作为魔术属性(即->relateAB)访问时,您将返回上的模型实例(可以访问关系的对象
relateBC

您可以使用该方法而不是magic属性,但请记住,您必须确定关系类型(一对多),并分别在基础查询生成器上调用
->get()
->first()

$distantRelations=App\A::find($id)
//“relateAB”是单数关系,
//所以我们需要调用'first()'
->relateAB()->first()/>App\B
//“relateBC”是一种“多”关系,
//所以我们需要调用'get()'
->relateBC()->get();/>App\C[]|\illumb\Support\Collection
HasOne
调用
first()

您可以在查询生成器上见证通过访问关系作为magic属性来执行的
HasOne
调用
first()

有许多调用
get()


您可以在查询生成器上看到
HasMany
调用
get()
,通过访问关系作为magic属性来执行。

在透视表中声明了A模型和B模型的主键,即作为这两个表的外键。

欢迎使用stackoverflow。请提供您的具体问题代码。这证明了你做了多大的努力,它将帮助其他成员更好地理解你的问题,同时,你将为他们提供你的问题的背景。请检查这些链接:并尝试了一下,我得到了一个BadMethodCallException,消息是“调用未定义的方法Illumb\Database\Query\Builder::relateAB()”请用相关代码更新您的问题(去掉不必要的内容)。包括3个模型和相关的关系方法。另外,有关数据库表的一些信息(它们的名称、主键列的名称)也会有所帮助。