如何在 Laravel Eloquent Query Builder 中编写复杂的 sql 查询

How can I write complex sql query in Laravel Elequent Query Builder

下面显示的是我在 SQL 服务器中的查询。它在 SQL 服务器工作室中运行良好。我怎样才能把它写成 Laravel eloquent 格式?

我尝试了 DB::table('Price')... 方法和 Price::where()... 模型方法。通过使用这两种方法,我无法找到平均值。

这是 eloquent 查询生成器的限制吗? 在 Laravel 中获取输出的最佳方法是什么?

select  month([Date]) as Date, 
avg(Oil) as Oil,
avg(Gas) as Gas,
 from [mydatabase].[dbo].[Price] 
 where year([Date]) = 2017
group by (month([Date]))

This is the output I get from sql

我得到了答案

$result = DB::select(DB::raw("select  month([Date]) as Date, 
avg(Oil) as Oil,
avg(Oil_Parity) as Gas,
 from [mydatabase].[dbo].[Price] 
 where year([Date]) = :year
group by (month([Date]))"),['year'=>$year]);

dd($result);

您可以使用 Raw expressions

来实现
  $query = DB::table('Price')
                         ->select(DB::raw('avg(Oil) as Oil, avg(Gas) as Gas, month'))
                         ->where('year', '==', '2017')
                         ->groupBy('month')
                         ->get();

You can use laravel's built in function DB::raw("complex query goes here").

对于您的查询,类似下面的内容是可能的

$data = DB::raw("select  month([Date]) as Date, 
avg(Oil) as Oil,
avg(Gas) as Gas,
 from [mydatabase].[dbo].[Price] 
 where year([Date]) = ?
group by (month([Date]))", ['2017']);

For DB::raw() More Check Here