2016-09-17 4 views
0

Im получая следующее сообщение об ошибке:Eloquent запросы на 2 таблиц

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'value' in 'where clause' (SQL: select sum(gross) as value, first_name from clients left join transactions on clients . id = transactions . client_id where value > 0 group by first_name)

С помощью этой функции?

$data = DB::table('clients')->leftjoin('transactions','clients.id','=','transactions.client_id') 
     ->select(DB::raw('sum(gross) as value, first_name')) 
     ->where('value','>',0) 
     ->groupBy('first_name') 
     ->get(); 

return $data; 

ответ

0

SQL is evaluated backwards, from right to left. So the where clause is parsed and evaluate prior to the select clause. Because of this the aliasing of sum(gross) to value has not yet occurred.

Aliases can be used in GROUP BY, ORDER BY, or HAVING clauses.

Таким образом, вместо того, чтобы использовать value в котором используйте sum(gross) в котором, как показано ниже.

$data = DB::table('clients')->leftjoin('transactions','clients.id','=','transactions.client_id') 
     ->select(DB::raw('sum(gross) as value, first_name')) 
     ->where('sum(gross)','>',0) 
     ->groupBy('first_name') 
     ->get(); 

return $data; 
+0

Благодаря Рахул, я вижу, как это может работать, я получаю следующее сообщение об ошибке: –

+1

SQLSTATE [42000]: Ошибка синтаксиса или нарушение прав доступа: 1463 Non-группируя поле «значение» используется в предложения HAVING (SQL: выберите сумму (брутто) как значение, first_name из 'clients' left join' transaction' на 'clients'.'id' =' transaction'.'client_id' группе 'first_name' с' value'> 0) –

+0

Пожалуйста, проверьте мои обновленный пост. Фактически вы можете использовать сумму (брутто) непосредственно в том месте, где вместо использования псевдонима. И жаль, что идея была неправильной. В том случае, если вы можете поставить условие только для сгруппированного поля. –

Смежные вопросы