用laravel中的多态关系对数据库结果进行排序

lx0bsm1f  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(399)

我有一个问题排序结果的多态关系在拉威尔。假设我们有两张这样的table:

users table : 
- integer id
- string  name 

meta table : 
- integer id
- string  key
- string  value 
- string  owner_type
- integer owner_id

用户表和元表之间是多态关系。因此,我们有一些用户,他们每个人都有一些元这是一个假设的例子,数据库记录(与元)

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

现在我想按meta-value列对用户结果进行排序,其中key是test。像这样:

$results = User::with(['meta' => function($q){
     $q->where('key' , 'test');
}])->orderBy('meta.value')->get();

当然,上面的代码不起作用
你的解决方案是什么?如果我们想从数据库中获取用户,并按一个具有特殊键的元的值对结果进行排序,我们应该怎么做?
注意:我想在得到结果之前对数据进行排序

3yhwsihp

3yhwsihp1#

加入怎么样?

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

相关问题