Reputation: 586
I have an issue for sorting results by polymorphic relation in Laravel . Suppose we have two table like this :
users table :
- integer id
- string name
meta table :
- integer id
- string key
- string value
- string owner_type
- integer owner_id
Relation between users table and meta table is polymorphic relation. So we have some users that each of them has some meta This is a hypothetical example of database records ( with meta )
id 1
name "user1"
meta :
id 3
key "test"
value "3"
owner_type "App\\User"
owner_id 1
id 2
key "some other key"
value "some other value"
owner_type "App\\User"
owner_id 1
id 2
name "user2"
meta :
id 3
key "test"
value "2"
owner_type "App\\User"
owner_id 2
Now I want sort users results by meta value column where key is test . something like this :
$results = User::with(['meta' => function($q){
$q->where('key' , 'test');
}])->orderBy('meta.value')->get();
But of course the code above does not work
What's your solution ? If we want get users from database and sort results by value of a meta witch has a special key what we should do ?
note : I want sort the data before getting results
Upvotes: 0
Views: 428
Reputation: 356
What about a join?
$results = User::join('meta', 'users.id', '=', 'meta.owner_id')
->where('meta.key','=','test')
->orderBy('meta.value')
->select('users.id', 'users.name')
->get();
Upvotes: 1