Laravel-渴望在不同的数据库实例上加载与过滤相关的模型

时间:2018-12-02 18:48:21

标签: laravel eloquent filtering

我正在尝试按照定义的here进行过滤。

这可行(从控制器A过滤模型A),但是控制器A /模型A与我要过滤的模型B有关系,以及从模型B与模型C的第三种关系。 / p>

模型A托管在数据库实例1上,模型B托管在数据库实例2上,并且完全分开。 这些关系,无需任何过滤器,就可以正常工作。

试图弄乱,我尝试了类似以下的操作,虽然显然不起作用,但是希望可以说明我要执行的操作。该过滤器将应用于模型A

protected function sn($sn)
{
    $s= Bid::where('crm', function ($query) {
        $query->where('sNumber', '=', 'SN512345');
    })->get();

    return $s;
}
  

SQLSTATE [42S22]:[Microsoft] [SQL Server的ODBC驱动程序17] [SQL Server]无效的列名'crm'。 (SQL:从[出价]中选择*,其中[crm] =(选择*其中[sNumber] = SN512345))

出价是模型A /控制器A,CRM是模型B,这是我要过滤的模型。

我考虑过要在模型中过滤许多不同的函数,但是我不知道这是否是最好的解决方案,我认为最好将其全部归入另一个类。

我尝试了以下操作,由于将查询应用于DB1,因此无法正常工作。

$s= Bid::with('crm')->whereHas('crm', function ($query) {
        $query->where('sNumber', '=', 'SN512345');
    })->get();
  

[SQL Server]无效的对象名称“机会”。 (SQL:从存在的[bids]中选择*(从存在[bids]的[Opportunity]中选择*。[crm_ref] = [Opportunity]。[sNumber]和[sNumber] = SN512345))

是否有一种以某种连贯且可重用的方式实现此目标的方法?我当时正在考虑采用加载Bid ::,使用已应用的过滤器加载CRM ::的方式,然后将CRM ::附加到Bid ::上,以某种方式以Eloquent的常规方式进行。

谢谢。

编辑: 我在BidFilter.php中使用以下过滤器 protected function sn($sn) { $users = DB::connection('sqlsrv_crm')->table('OpportunityBase')->select('*')->where('new_SalesNumber', '=', $sn)->get(); return $users; }

这将过滤结果集,如我在调试栏中看到的: debug bar queries

但是,这还会加载正常的未过滤的,渴望加载的CRM关系。如何切换到过滤后的CRM结果,而不是默认的未过滤结果?

BidController索引方法:

public function index(BidFilter $filters)
{
        $bids = $this->getBids($filters);
        return view('public.bids.index', compact('bids'));
}

BidFilter

    public function index(BidFilter $filters)
{
        $bids = $this->getBids($filters);
        return view('public.bids.index', compact('bids'));
}

0 个答案:

没有答案