代码之家  ›  专栏  ›  技术社区  ›  pmiranda

在Laravel查询生成器中使用“AND”,语法错误(orOn)

  •  3
  • pmiranda  · 技术社区  · 7 年前

    我有一个sql(MariaDB)查询,它可以正常工作:

    SELECT
        admin_combustibles.nombre,
        admin_combustibles.id_combustible,
        admin_combustible_unidades.nombre AS unidades,
        admin_tipo_combustibles.nombre AS tipo_combustible,
        admin_indice_combustibles.valor_combustible
    FROM
        admin_combustibles
    INNER JOIN admin_combustible_unidades ON admin_combustibles.combustible_unidades_id = admin_combustible_unidades.id_combustible_unidad
    INNER JOIN admin_tipo_combustibles ON admin_combustibles.tipo_combustible_id = admin_tipo_combustibles.id_tipo_combustible
    LEFT  JOIN admin_indice_combustibles ON admin_combustibles.id_combustible = admin_indice_combustibles.combustible_id
    AND admin_indice_combustibles.anio = 1992
    AND admin_indice_combustibles.mes = 6
    ORDER BY
        admin_combustibles.nombre
    

    但当我试图通过拉雷维尔时,我有一些错误,因为拉雷维尔放了一些 在数字1992上,这样查询就不起作用了。

    另外,我不知道怎么做 AND 在拉雷维尔,我只有 orOn 但它不起作用:

    $datos = AdminCombustible::select([
        'admin_combustibles.nombre',
        'admin_combustibles.id_combustible',
        'admin_combustible_unidades.nombre AS unidades',
        'admin_tipo_combustibles.nombre AS tipo_combustible',
        'admin_indice_combustibles.valor_combustible'])
        ->join('admin_combustible_unidades', 'admin_combustibles.combustible_unidades_id', '=', 'admin_combustible_unidades.id_combustible_unidad')
        ->join('admin_tipo_combustibles', 'admin_combustibles.tipo_combustible_id', '=', 'admin_tipo_combustibles.id_tipo_combustible')
    
        ->leftJoin('admin_indice_combustibles', function ($join) {
            $join->on('admin_indice_combustibles.combustible_id', '=', 'admin_combustibles.id_combustible')->orOn('admin_indice_combustibles.anio', '=', 1992);
        })
        ->get();
        dd($datos);
    

    我有一个sql语法错误。

    关于如何使用Laravel的查询生成器进行查询,有什么帮助吗?(我将整个查询放在DB::raw中,它可以工作,但我不想使用raw())

    1 回复  |  直到 7 年前
        1
  •  6
  •   user1669496    7 年前

    我认为这里可能有两个问题。因为您正在使用 and 在原始查询中,您可能需要使用 or 而不是 orOn

    此外,您还需要使用 DB::raw() 在参数上,否则Laravel会将其视为列。。。。

    $join->on('admin_indice_combustibles.combustible_id', '=', 'admin_combustibles.id_combustible')->on('admin_indice_combustibles.anio', '=', DB::raw('1992'));