在 Laravel Query Builder 中使用 `AND`,语法错误 (orOn)

Posted

技术标签:

【中文标题】在 Laravel Query Builder 中使用 `AND`,语法错误 (orOn)【英文标题】:Use `AND` in Laravel Query Builder, syntax error (orOn) 【发布时间】:2018-04-07 03:00:05 【问题描述】:

我有这个 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

但是当我尝试通过 Laravel 进行查询时,我遇到了一些错误,因为 Laravel 在数字 1992 上添加了一些 ,这样查询就不起作用了。

另外,我不知道如何在 Laravel 上执行 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() )

【问题讨论】:

这可能会有所帮助 - Laravel Eloquent inner join with multiple conditions 【参考方案1】:

我认为这里可能存在两个问题。由于您在原始查询中使用 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'));

【讨论】:

以上是关于在 Laravel Query Builder 中使用 `AND`,语法错误 (orOn)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中的Query Builder

Laravel中的Query Builder

Laravel Query:为 Query Builder 实现 Eloquent Scope

Laravel 查询错误 - 调用未定义的方法 Illuminate\Database\Query\Builder::query()

如何在 Laravel Query Builder 中执行 TRIM() 和 CONCAT()?

在 Laravel Query Builder 中使用 `AND`,语法错误 (orOn)