Я пытаюсь реализовать фильтрацию, как определено здесь .
Это работает (для фильтрации модели A из контроллера A), однако контроллер A / модель A имеет отношение к модели BЭто то, что я хочу отфильтровать, а также третье отношение к модели C из модели B.
Модель 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 17 для SQL Server] [SQL Server] Недопустимое имя столбца «crm».(SQL: выберите * из [bids], где [crm] = (выберите *, где [sNumber] = SN512345))
Bid - это модель A / контроллер A, CRM - это модель B, которая являетсяЯ хочу фильтровать.
Я думал о наличии множества различных функций в модели для фильтрации, однако я не знаю, было ли это лучшим решением, и я подумал, что было бы лучше перенести все это в другой класс..
Я попробовал следующее, которое не работает, поскольку он применяет запрос к DB1.
$s= Bid::with('crm')->whereHas('crm', function ($query) {
$query->where('sNumber', '=', 'SN512345');
})->get();
[SQL Server] Неверное имя объекта «Возможность».(SQL: выберите * из [ставок], где существует (выберите * из [Возможности], где [ставки]. [Crm_ref] = [Возможности]. [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;
}
И это фильтрует набор результатов, как я вижу в панели отладки: запросы панели отладки
Однако это также загрузка нормальных нефильтрованных загруженных отношений 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'));
}