BizHat
BizHat

Reputation: 1

Laravel 3 - Order by the division of two fields

I need following SQL converted to eloquent

select * from medias order by likes/views DESC, views ASC

I need to use paginate on the result, that is why i prefer eloquent.

Some of my other SQL queries are

$media_list = Media::order_by('likes', 'desc')->paginate($per_page);

I tried

$media_list = Media::order_by('likes/views', 'desc')->paginate($per_page);

But it gives error

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'likes/views' in 'order clause'
SQL: SELECT * FROM `medias` ORDER BY `likes/views` DESC LIMIT 20 OFFSET 0

Anyone know how to fix this ?

Upvotes: 0

Views: 2142

Answers (1)

M Khalid Junaid
M Khalid Junaid

Reputation: 64466

Try , instead of /

$media_list = Media::order_by('likes,views', 'desc')->paginate($per_page);

or

$media_list = Media::order_by('likes`,`views', 'desc')->paginate($per_page);

And also this is the standard way of doing in laravel

$media_list = Media::order_by('likes', 'desc')->orderBy('views', 'desc')->paginate($per_page);

$media_list = DB::table('medias')
    ->select(DB::raw('(likes/views) AS resultant'))
    ->order_by('resultant', 'desc')->orderBy('views', 'desc')
    ->get();

Upvotes: 1

Related Questions