如果要執行復雜的查詢,laravel提供了查詢生成器工具,則可以使用DB外觀上的表方法來開始查詢。
在你的控制器,你就必須添加以下行使用DB門面:
use Illuminate\Support\Facades\DB;
要執行的查詢將被修建這樣的:
$query = DB::table('vehicle_colour_and_trims')
->join('colours', 'vehicle_colour_and_trims.colour_id', '=','colours.id')
->join('vehicle_options', 'colours.option_id', '=','vehicle_options.option_id')
->select('colours.id AS id',
'colours.description AS description',
'vehicle_colour_and_trims.colour_id AS colour_id',
'colours.code AS code',
'vehicle_options.basic_price AS basic_price',
'vehicle_options.mrp AS mrp',
'vehicle_options.vat AS vat')
->where('vehicle_colour_and_trims.vehicle_id','=', 116922)
->groupBy('colours.code')
->orderBy('colours.description', 'desc')
->get();
你可以閱讀更多關於laravel文檔中的查詢生成器的信息
https://laravel.com/docs/5.5/queries
使用此查詢會出現SQLSTATE [42000]錯誤,因爲在mysql中默認啓用了sql_mode = ONLY_FULL_GROUP_BY **,這意味着MySQL會拒絕選擇列表,HAVING條件或ORDER BY引用非聚合列的查詢沒有在GROUP BY子句中命名或在功能上依賴於它們。
爲了添加到選擇列表列,而無需將其添加到GROUP_BY條款,你必須使用的函數ANY_VALUE()爲每個不必存在的子句中的列的,試試這個:
$query = DB::table('vehicle_colour_and_trims')
->join('colours', 'vehicle_colour_and_trims.colour_id', '=','colours.id')
->join('vehicle_options', 'colours.option_id', '=','vehicle_options.option_id')
->select(DB::raw('ANY_VALUE(colours.id) AS id,
ANY_VALUE(colours.description) AS description,
ANY_VALUE(vehicle_colour_and_trims.colour_id) AS colour_id,
colours.code AS code,
ANY_VALUE(vehicle_options.basic_price) AS basic_price,
ANY_VALUE(vehicle_options.mrp) AS mrp,
ANY_VALUE(vehicle_options.vat) AS vat'))
->where('vehicle_colour_and_trims.vehicle_id','=', 116922)
->groupBy('colours.code')
->orderBy('colours.description', 'desc')
->get();
的DB ::原始()函數允許您創建原始表達式
更多信息:
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
不確定爲什麼你需要一個沒有聚合的組。 – xQbert
你會得到錯誤嗎?你不期望的結果? – Randy
在沒有任何聚合函數的情況下,您的GROUP BY子句可能會返回錯誤和/或意外(即不確定)結果。另外,什麼是'增值稅'? – Strawberry