我正在尝试按照定义的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'));
}