我正在尝试根据相关表格中的列选择计算列。
这是SQL
中的等价物SELECT
*,
(p.weight * p.fineness * f.fixam / 31.1035) as buy_gram
FROM
products p, fixes f, metals m
WHERE
p.metal_id = m.id AND
f.metal_id = m.id AND
f.currency_id = :cid
这是我到目前为止使用Laravel Query Builder的尝试。
$products = Product::select(
['*',DB::raw('weight * fineness * fixes.fixam / 31.1035 as buy_gram')])
->with(array(
'metal',
'metal.fixes.currency',
'metal.fixes' => function($query) use ($currency_id){
$query->where('currency_id', '=', $currency_id);
}))->get();
return View::make('admin.products.index')->with('products', $products);
我面临一条错误消息:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'fixes.fixam' in 'field list' (SQL: select *, weight * fineness * fixes.fixam as buy_gram from `products`) (Bindings: array ( ))
我还尝试了fixes.fixam
的其他组合,例如metal.fixes.fixam
,metals.fixes.fixam
问题1:如何使用laravel查询构建器查询此外表以执行计算? 问题2:是否有某种控制台/日志文件可以将生成的sql输出到我的laravel查询中?
答案 0 :(得分:0)
我会使用不同的方法,使用inner join
表。像这样:
DB::table('products')
->join('metals','products.metal_id','=','metals.id','inner')
->join('fixes','fixes.metal_id','=','metals.id','inner')
->where('fixes.currency_id',':cid')
->select(DB::raw('products.*, (products.weight * products.fineness * fixes.fixam / 31.1035) as buy_gram'))
->get();
要实现最后一次查询:
$queries = DB::getQueryLog();
$last_query = end($queries);
您还可以使用分析器查看所有查询和更多信息。 juy/profiler是我正在使用的那个。