laravel - Laravel - 在不同的数据库实例上急切加载过滤相关模型
问题描述
我正在尝试实现此处定义的过滤。
这有效(从控制器 A 过滤模型 A),但是控制器 A/模型 A 与模型 B 有关系,这是我想要过滤的,以及从模型 B 到模型 C 的第三关系。
模型 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][ODBC Driver 17 for SQL Server][SQL Server]列名“crm”无效。(SQL: select * from [bids] where [crm] = (select * where [sNumber] = SN512345))
出价是模型 A/控制器 A,CRM 是模型 B,这是我要过滤的模型。
我曾想过在模型中有许多不同的函数来过滤,但是我不知道这是否是最好的解决方案,我认为最好把它全部放到另一个类中。
我尝试了以下方法,但它不起作用,因为它将查询应用于 DB1。
$s= Bid::with('crm')->whereHas('crm', function ($query) {
$query->where('sNumber', '=', 'SN512345');
})->get();
[SQL Server]无效的对象名称“机会”。(SQL: select * from [bids] where exists (select * from [Opportunity] where [bids].[crm_ref] = [Opportunity].[sNumber] and [sNumber] = SN512345))
有没有办法以某种连贯且可重用的方式实现这一点?我正在考虑加载 Bid::,使用应用过滤器加载 CRM::,然后以 Eloquent 执行此操作的正常方式将 CRM:: 附加到 Bid::。
谢谢。
编辑:我在 BidFilter.php 中使用以下过滤器
protected function sn($sn)
{
$users = DB::connection('sqlsrv_crm')->table('OpportunityBase')->select('*')->where('new_SalesNumber', '=', $sn)->get();
return $users;
}
这过滤了结果集,正如我在调试栏中看到的那样: 调试栏查询
然而,这也加载了正常的未过滤急切加载的 CRM 关系。如何切换到过滤后的 CRM 结果而不是默认的未过滤?
BidController 索引方法:
public function index(BidFilter $filters)
{
$bids = $this->getBids($filters);
return view('public.bids.index', compact('bids'));
}
出价过滤器
public function index(BidFilter $filters)
{
$bids = $this->getBids($filters);
return view('public.bids.index', compact('bids'));
}
解决方案
推荐阅读
- java - Scanner never stops reading from keyboard
- javascript - does the order of my node js matter on how I process server.js?
- javascript - Pie Chart Balloon
- c# - 防止socket自动关闭连接
- python - 为什么 matplotlib 返回一个对象而不是绘制它?
- angular - 是否可以将 Angular Material 用于 Angular4 应用程序?
- python - 如何在 gensim 中手动设置 Tfidf 模型的值
- ios - 如何为我的 SexyTooltip 实例定义允许的箭头方向?
- java - Add up BigDecimals in Map by matching with keys from another Set
- python-3.x - 测试python3的互联网连接