加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – laravel 5.1中使用hasManyThrough关系的模型的不同数据库

发布时间:2020-12-14 19:47:02 所属栏目:大数据 来源:网络整理
导读:我试图在laravel 5.1中使用hasManyThrough关系,但是sql查询没有使用每个连接中为每个使用的模型定义的适当前缀. 我有3个模型2其中使用相同的连接,其中一个使用不同的连接.连接之间的唯一区别是数据库的前缀相同. 模型A具有使用前缀A_的连接A. 模型B有连接B,
我试图在laravel 5.1中使用hasManyThrough关系,但是sql查询没有使用每个连接中为每个使用的模型定义的适当前缀.
我有3个模型2其中使用相同的连接,其中一个使用不同的连接.连接之间的唯一区别是数据库的前缀相同.

>模型A具有使用前缀A_的连接A.
>模型B有连接B,使用前缀B_
>模型C有连接B,它使用前缀B_

关系:

B型内部:

public function relationshipWithA()
{
    return $this->hasManyThrough(A::class,C::class,'Cid','Aid');
}

最终查询逻辑是正确的,但不是对连接表使用B_前缀,而是使用查询中所有表的A_前缀.

这是laravel的错误/限制吗?有没有解决方案,或者我必须手动加入才能达到我的目的?

其他关系类型适用于多个数据库连接:
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())

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读