Сортировать результаты базы данных по полиморфным отношениям в Laravel - PullRequest
0 голосов
/ 07 мая 2018

У меня проблема с сортировкой результатов по полиморфным отношениям в Laravel. Предположим, у нас есть две таблицы, подобные этой:

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

Теперь я хочу отсортировать результаты пользователей по столбцу мета-значений, где ключ - это тест. как то так:

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

Но, конечно, приведенный выше код не работает

Каково ваше решение? Если мы хотим получить пользователей из базы данных и отсортировать результаты по значению, у мета-ведьмы есть специальный ключ, что нам делать?

примечание: я хочу отсортировать данные до получения результатов

1 Ответ

0 голосов
/ 07 мая 2018

А как насчет объединения?

$results = User::join('meta', 'users.id', '=', 'meta.owner_id')
                   ->where('meta.key','=','test')
                   ->orderBy('meta.value')
                   ->select('users.id', 'users.name')
                   ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...