Преобразование необработанного результата запроса MySql в коллекцию Laravel (hydraRaw)?

Я пытаюсь заставить Laravel Pagination работать с результатами, которые я получаю из своей базы данных, используя необработанный запрос:

select sub.*, count(l.PRODID) as likecount
from (
    select p.*, count(c.PRODID) as commentcount
    from products p
    left join comments c on c.PRODID = p.ID
    group by p.ID
) sub 
left join likes l on l.PRODID = sub.ID
group by sub.ID

Но пока результатом является простой массив, функция paginate() работать не будет.

Я нашел метод HydraRaw в документах, но как бы я ни пытался, он выдает мне ошибку.

Спасибо!


person Edmond Tamas    schedule 03.10.2016    source источник
comment
Используйте метод selectRaw в модели Eloquent. stackoverflow.com/questions/30321497/   -  person Shahid Chaudhary    schedule 03.10.2016
comment
с фасадом БД .com/questions/29968354/   -  person Shahid Chaudhary    schedule 03.10.2016
comment
Спасибо, действительно, используя фасады, это можно сделать, но я хотел бы узнать, как использовать гидрат() и гидратRaw(), чтобы иметь их в моем поясе инструментов на будущее.   -  person Edmond Tamas    schedule 03.10.2016
comment
Вы пробовали использовать вот так: $model->hydrateRaw($query, [])?   -  person Can Vural    schedule 03.10.2016
comment
если я попробую внутри своего контроллера: $model = \App\Product; $model->hydrateRaw($query, []) с указанным выше запросом - получу: Неопределенная константа 'App\Product'   -  person Edmond Tamas    schedule 03.10.2016
comment
hydrate() и hydrateRaw() являются статическими методами. Вы должны называть их так, \App\Product::hydrate()/\App\Product::hydrateRaw()   -  person Doom5    schedule 03.10.2016
comment
$model = \App\Product; это недействительный PHP. Вы должны создать новый экземпляр с new   -  person Can Vural    schedule 03.10.2016
comment
@Doom5, спасибо, я ошибаюсь, теперь я получаю коллекцию в качестве вывода для \App\Product::hydrateRaw("select sub.*, count(l.PRODID) as likecount from ( select......etc ", [])->paginate(15);, но, похоже, paginate() это не нравится, она выдает: BadMethodCallException в строке 74 Macroable.php: метод paginate не существует.< /б>   -  person Edmond Tamas    schedule 03.10.2016
comment
@Edmond Методы hydrate() и hydrateRaw() возвращают экземпляр Illuminate\Database\Eloquent\Collection, у которого нет метода paginate(). Вы можете создать свой собственный объект пагинации.   -  person Doom5    schedule 04.10.2016
comment
@Doom5, понял, спасибо за подтверждение!   -  person Edmond Tamas    schedule 04.10.2016