Реляционные запросы Laravel - ManytoManytoMany - PullRequest
0 голосов
/ 25 января 2019

В моем запросе мне нужно связать мою модель Workflow с зарегистрированной в данный момент Client через две связанные таблицы: ClientCompany и CompanyWorkflow.

Записать базовый запрос не было проблемой:

DB::table('workflows AS w')
    ->leftJoin('company_workflow AS cw', 'cw.workflow_id', '=', 'w.id')
    ->leftJoin('client_company AS cc', 'cw.company_id', '=', 'cc.company_id')
    ->where([
        ['cc.client_id', '=', $this->id]
    ]);

Этот запрос не будет принят как relational query, и я хотел бы использовать следующий метод $client->workflows, чтобы получить доступный набор workflows.

Есть ли способ, которым я могу преобразовать запрос в relational query или способ, которым я могу связать несколько belongsToMany запросов?

Моя структура базы данных такова:

client
id

client_company
id    client_id    company_id

company
id

company_workflow
id    company_id   workflow_id

workflow
id

ОБНОВЛЕНИЕ: В настоящее время я смог построить следующий hasManyThrough, который почти выводит правильный запрос:

    $this->hasManyThrough('\App\Workflow', '\App\CompanyWorkflow', 'workflow_id', 'id')
        ->leftJoin('client_company AS cc', 'company_workflow.company_id', '=', 'cc.company_id')
        ->where([
            ['cc.client_id', '=', $this->id]
        ]);

Вышеуказанный запрос построен как:

select * from `workflows` inner join `company_workflow` on `company_workflow`.`id` = `workflows`.`id` left join `client_company` as `cc` on `company_workflow`.`company_id` = `cc`.`company_id` where `company_workflow`.`workflow_id` = ? and (`cc`.`client_id` = ?)

Но по какой-то причине я все еще не получаю никаких результатов. Непосредственное выполнение в базе данных с правильными id с, однако, возвращает правильный набор.

Обновит вопрос, когда найду ответ.

...