I need to filter my data that match a specified criteria, see the example below
DB SCHEME
user
- id
- name
company
- id
- name
user_company
- user_id
- company_id
- date
- note
DATA
user
| id | name | | — | —- | | 1 | john | | 2 | jim |
company
| id | name | | — | ———— | | 1 | Google | | 2 | Stackoverflow |
user_company
user_id | company_id | end_date | note |
---|---|---|---|
1 | 2 | 31/12/2018 | Left |
1 | 1 | 31/12/2020 | Fired |
1 | 2 | NULL | Hired |
2 | 1 | NULL | Hired |
I just wanted to know who and for which company is working actually.
User.php
JavaScript
x
public function companies() {
return $this
->belongsToMany('AppCompany', 'user_company', 'user_id', 'company_id')
->as('company')
->withPivot(['end_date', 'note'])
}
my query
JavaScript
$users = User::with('companies')->select(['user.*']);
Already tried using wherePivotNull('end_date')
either in model relationship and in controller query, no success.. I still miss something.
Advertisement
Answer
I think using whereHas
, we can achieve that
JavaScript
$users = User::with('companies')
->whereHas('companies',function ($query){
$query->whereNull('user_company.end_date');
})
->get();