我试图在laravel 5.1中使用hasManyThrough关系,但是SQL查询没有使用每个连接中为每个使用的模型定义的适当前缀.
我有3个模型2其中使用相同的连接,其中一个使用不同的连接.连接之间的唯一区别是数据库的前缀相同.
我有3个模型2其中使用相同的连接,其中一个使用不同的连接.连接之间的唯一区别是数据库的前缀相同.
>模型A具有使用前缀A_的连接A.
>模型B有连接B,使用前缀B_
>模型C有连接B,它使用前缀B_
关系:
B型内部:
public function relationshipWithA() { return $this->hasManyThrough(A::class,C::class,'Cid','Aid'); }
其他关系类型适用于多个数据库连接:
public function foos() { return $this->belongsToMany(Foo::class,'other_db.foos'); }
但hasManyThrough在其签名中没有$table参数,因此相同的解决方案不适用.
然而,
您可以像这样制作一个不完美的解决方法:
public function bars() { return $this->belongsToMany(Bar::class,'other_db.bars'); } public function foos() { $barIds = $this->bars->pluck('id'); return Foo::whereIn('bar_id',$barIds); }
它不提供完全相同的功能(因为它是一种不同的返回类型),但实现了更简单的事情的目的.
如果需要,您还可以通过执行以下操作来复制更多语法:
protected $appends = [ 'foos',]; /** * @return Foo[] */ public function getFoosAttribute() { return $this->foos()->get(); }
这样你仍然可以在你的代码中使用它,就像你大多数时候有一个常规关系一样(意思是你可以使用$this-> foos而不是$this-> foos() – > get())