Ключевое слово Laravel Eloquent AS

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

Это полный запрос на данный момент.

$quotes = Quote::where('created_at', '>=', $date)
        ->where('created_at', '<=', date('Y-m-d').' 23:59:59')
        ->order_by('upvotes', 'desc')
        ->paginate(5);

я хотел бы сделать

->order_by('(downvotes - upvotes) as votes', 'desc')

Спасибо.


Решение

Кажется, что использование DB::raw() - единственный способ сделать это, Laravel/Eloquent просто не понимает AS.

Рабочее решение

 $quotes = Quote::select(array('id', DB::raw('(downvotes - upvotes) as votes'), 'upvotes', 'downvotes', 'etc')) // Rest of column needed.
        ->where('created_at', '>=', $date)
        ->where('created_at', '<=', date('Y-m-d').' 23:59:59')
        ->order_by('votes', 'asc')
        ->paginate(5);

person Lee    schedule 01.03.2013    source источник
comment
Как выглядит необработанный sql-запрос? Попробуйте использовать DB::raw().   -  person Jürgen Paul    schedule 01.03.2013
comment
Использование DB::raw() в select() сработало, спасибо.   -  person Lee    schedule 01.03.2013
comment
На самом деле он прекрасно понимает AS. Проблема связана с оператором вычитания «-». Использование DB::raw(), как вы сделали, является правильным способом справиться с этой ситуацией.   -  person Collin James    schedule 13.03.2013


Ответы (2)


Попробуй это:

Quote::where('created_at', '>=', $date)
        ->select(array('id',DB::raw('(downvotes - upvotes) as votes'))) //and what you need
        ->where('created_at', '<=', date('Y-m-d').' 23:59:59')
        ->order_by('upvotes', 'desc')
        ->order_by('votes', 'desc')
        ->paginate(5);
person Bilal Gultekin    schedule 01.03.2013
comment
Не работает, (downvotes - upvotes) as votes читается как SELECT id', '(downvotes' AS 'upvotes)', 'quotes',, что приводит к ошибке. - person Lee; 01.03.2013
comment
Вероятно, необходимо использовать DB:raw. Можешь попробовать еще раз? - person Bilal Gultekin; 02.03.2013

$selectdata = DB::table('TableDetails')
            ->leftJoin('TableStatus', 'TableDetails.TableID', '=', 'TableStatus.TableID')
            ->leftJoin('LoginUser', 'TableStatus.WaiterLoginID', '=', 'LoginUser.LoginID')
            ->leftJoin('UserRole', 'LoginUser.UserRoleID', '=', 'UserRole.UserRoleID')
            ->select('LoginUser.UserName','UserRole.UserRoleName','TableStatus.TableStatus','TableStatus.TableTimeStatus','TableStatus.WaiterLoginID','TableDetails.TableSeatCount - TableStatus.TableSeatOccupied AS TableRemainingCount')
            ->get();

Просто живите «Пробелом» до и после символа «Минус», это сработало для меня.

person velayutham    schedule 16.06.2015