2017-09-24 54 views
0

我想测试MySQL中Laravel函数的输出,为此我需要将代码翻译成SQL请求。将Laravel函数转换为SQL请求来测试

功能:

return DB::table('products') 
     ->leftJoin('product_locations', 'products.id', '=', 'product_locations.productId') 
     ->select(DB::raw('IF(product_locations.id is not null,concat(product_locations.id,"-","M"),concat(products.id,"-","N")) as id'), DB::raw('IF(product_locations.id is not null,1,0) as multilocation'), 'products.productName', 'products.productName as text', 'product_locations.productLocationName', 'product_locations.binLocationName', 'product_locations.unitCost', 'product_locations.amount') 
     ->orderBy('products.productName') 
     ->distinct() 
     ->get(); 

回答

2

使用查询日志记录:

DB::connection()->enableQueryLog(); 

DB::table('products') 
     ->leftJoin('product_locations', 'products.id', '=', 'product_locations.productId') 
     ->select(DB::raw('IF(product_locations.id is not null,concat(product_locations.id,"-","M"),concat(products.id,"-","N")) as id'), DB::raw('IF(product_locations.id is not null,1,0) as multilocation'), 'products.productName', 'products.productName as text', 'product_locations.productLocationName', 'product_locations.binLocationName', 'product_locations.unitCost', 'product_locations.amount') 
     ->orderBy('products.productName') 
     ->distinct() 
     ->get(); 

dd(DB::getQueryLog()) 
+0

感谢您的帮助,我试图按照您指定的方式使用查询日志记录,但在“chrom的开发人员工具”上看不到任何结果 – allam

+0

这将在您的屏幕上显示执行的查询,而不是在开发工具中 –

0

这不是办法,但仍可以得到事半功倍的结果相同。

在查询中犯一个小错误,例如使用删除表名或列名的最后一个字符。然后它引发一个显示查询的错误。然后你可以很容易地在屏幕上获得你的查询。

在您的查询中,使用product而不是products。这会导致查询错误并显示它。