Laravel проверяет более одного параметра на красноречивую связь

У меня есть три таблицы, как показано ниже.

Таблица- 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.

Заранее спасибо.


person Yagnik Detroja    schedule 16.08.2017    source источник


Ответы (1)


Было бы проще с другой структурой, пример вашей таблицы «Служба учетной записи» (конечно, по умолчанию завершено будет 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();
}
person Thibault Dumas    schedule 16.08.2017
comment
Нет, я не могу изменить структуру своей таблицы, потому что есть много других полей, которые не только заполнены или не заполнены на 0,1. так что это не сработает. Техас - person Yagnik Detroja; 16.08.2017