Laravel - активно загружает связанную с фильтрацией модель в другой экземпляр базы данных - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь реализовать фильтрацию, как определено здесь .

Это работает (для фильтрации модели 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'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...