如何使用方法链接从Laravel Elount中的远程关系模型中检索数据?
我有模型A,B和C。A和B有一个关系,B和C有很多关系如何使用方法链接从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
//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个模型和相关的关系方法。另外,有关数据库表的一些信息(它们的名称、主键列的名称)也会有所帮助。