【问题标题】:Laravel WhereHas with two separated databasesLaravel WhereHas 有两个独立的数据库
【发布时间】:2022-01-22 20:00:02
【问题描述】:

您好,我在尝试查询另一个数据库时遇到问题。

我有 3 个表:koop_app (mysql) 数据库中的“MarketAgreement”和“MarketTransaction”以及 koop_app_energia 数据库中的“AgreementEnergia”表

我的模特:

使用“MarketAgreement”模型,WhereHas 非常适合我,但使用“AgreementEnergia”我收到此错误:

我已经声明了每个表属于哪个数据库,但是当我尝试在“AgreementEnergia”(在 koo_app_energia 数据库中找到)和“MarketTransaction”(在 koop_app 数据库中找到)之间交叉时,Laravel 仍然试图找到该表在错误的数据库中。

我该如何解决?非常感谢。

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    对于“belongsToMany”关系,您可以这样做:

    public function your_method()
    {
        $database = $this->getConnection()->getDatabaseName();
    
        return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id');
    }
    

    但是:当您对数据之间的关系进行建模时,它隐含在同一个数据库中。预计不会在两个不同的数据库中这样做

    对于“有”关系,Eloquent 目前不支持跨数据库查询关系是否存在。关系必须存在于同一个数据库中 (https://laravel.com/docs/8.x/eloquent-relationships#querying-relationship-existence)

    PS:请不要放截图,而是代码sn-ps

    【讨论】:

    • 如何将它应用到我的代码中?
    • 您可以编辑您的问题以放置代码 sn-ps 吗?帮助你会更容易。对于您的情况,您似乎无法使用“hasOne”来做到这一点。 laravel.com/docs/8.x/… 逻辑希望这些表都在同一个数据库中
    • 链接摘录:Eloquent 目前不支持跨数据库查询关系存在。这些关系必须存在于同一个数据库中。
    【解决方案2】:

    我通过简单地将protected $table = 'market_transactions'; 更改为protected $table = 'koop_app.market_transactions'; 解决了这个问题

    【讨论】:

      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多