У меня есть три таблицы, как показано ниже структуры.
Таблица — AccountService
id | service_id| account_id|
----------------------------
1 | 1 | 8181 |
2 | 2 | 8181 |
3 | 3 | 8181 |
4 | 5 | 8181 |
Таблица: — Услуги
id | Name |
------------
1 | A |
2 | B |
3 | C |
4 | D |
Таблица: — CompletedService
id | service_id | account_id
------------------------------
1 | 1 | 8181
2 | 1 | 8182
3 | 1 | 8181
4 | 2 | 8181
Теперь МОИ отношения запрос ниже.
$acc = AccountService::with(['service' => function($q) {
}])->with(['completedServiceRest' => function($q) {
}])->where('account_id', $account_id)->get();
Как я могу получить записи в части отношений на основе account_id и service_id обоих.
В настоящее время записи отображаются в отношении CompleteSericeRest есть все записи, которые account_id совпадает с таблицей AccountService.
Когда это отношение произойдет, проверьте и service_id, и account_id из завершенного сервиса, а не только account_id.
Ниже отношения в модели.
public function completedServiceRest() {
return $this->hasMany('App\CompletedService', 'account_id', 'account_id');
}
в настоящее время получают все записи идентификатора account_id, соответствующие не на основе обоих параметров, service_id и account_id влияют только на account_id.
Заранее спасибо.
Было бы проще с другой структурой, например, с вашей таблицей «Служба учетных записей» (конечно, по умолчанию будет выполнено 0):
id | service_id | account_id | completed |
------------------------------------------
1 | 1 | 8181 | 0 |
2 | 2 | 8181 | 1 |
Ваше основное отношение будет:
public function accountedServices()
{
return $this->hasMany('App\AccountService', 'account_id', 'account_id');
}
И чтобы проверить ваши завершенные услуги:
public function completedServiceRest()
{
return $services->accountedServices()->where('completed', 1)->get();
}
Других решений пока нет …