首页 文章

Laravel DB Query Builder从mySQL转换而来

提问于
浏览
0

我试图根据相关表中的列选择计算列 .

这在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.fixammetals.fixes.fixam

问题1:如何使用laravel查询构建器查询此外表以执行计算?问题2:是否存在某种控制台/日志文件,我可以将生成的sql输出到我的laravel查询中?

1 回答

  • 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是我正在使用的那个 .

相关问题