按照Laravel

时间:2018-05-07 13:55:38

标签: php mysql laravel relationship

我有一个问题是通过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();

但当然上面的代码不起作用

你的解决方案是什么? 如果我们想要从数据库中获取用户并按元值的值排序结果,那么我们应该做一个特殊的密钥?

注意:我想在获得结果之前对数据进行排序

1 个答案:

答案 0 :(得分:1)

加入怎么样?

$results = User::join('meta', 'users.id', '=', 'meta.owner_id')
                   ->where('meta.key','=','test')
                   ->orderBy('meta.value')
                   ->select('users.id', 'users.name')
                   ->get();