我有一个问题是通过Laravel中的多态关系对结果进行排序。 假设我们有两个这样的表:
users table :
- integer id
- string name
meta table :
- integer id
- string key
- string value
- string owner_type
- integer owner_id
users表和meta表之间的关系是多态关系。 所以我们有一些用户,他们每个人都有一些元 这是数据库记录的假设示例(使用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
现在我希望按键值为test的元值列对用户进行排序。 像这样的东西:
$results = User::with(['meta' => function($q){
$q->where('key' , 'test');
}])->orderBy('meta.value')->get();
但当然上面的代码不起作用
你的解决方案是什么? 如果我们想要从数据库中获取用户并按元值的值排序结果,那么我们应该做一个特殊的密钥?
注意:我想在获得结果之前对数据进行排序
答案 0 :(得分:1)
加入怎么样?
$results = User::join('meta', 'users.id', '=', 'meta.owner_id')
->where('meta.key','=','test')
->orderBy('meta.value')
->select('users.id', 'users.name')
->get();