I have to Models User
and UserAttr
User is like :
id | name |
---|---|
1 | john |
2 | doe |
UserAttr is like
id | user_id | job |
---|---|---|
1 | 1 | seller |
2 | 2 | teacher |
them relation is :
for user :
//User MODEL
public function UserAttr(){
return $this->hasOne(UserAttr::class);
}
for UserAttr :
//UserAttr MODEL
public function UserAttr(){
return $this->belongsTo(User::class);
}
Inside of controller i want to return this
Return all Users Where They job is Seller
i try
$users = User::where(User::UserAttr()->where('job','teacher'));
return $users;
but it not works
CodePudding user response:
First, 'where' requires two arguments. where('column', 'value')
. Second, until you use a function dedicated for returning the results, like find(1)
, first()
, get()
, you will always get a builder object.
In this particular case, you need to query the relationship. Something like this should work for you.
User::with('userAttr')->whereHas('userAttr', function($query){
return $query->where('job', 'teacher');
})->get();
For reference: https://laravel.com/docs/9.x/eloquent-relationships#querying-relationship-existence