В моем запросе мне нужно связать мою модель 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
с, однако, возвращает правильный набор.
Обновит вопрос, когда найду ответ.