【问题标题】:How to make multiple subquery in Laravel 6?如何在 Laravel 6 中进行多个子查询?
【发布时间】:2021-02-13 08:25:23
【问题描述】:

我正在使用 PHP 和 Laravel 6,我需要查询多个子查询。子查询在同一张表上,我不能用连接来做(或者我想不出办法)。

我需要做这个查询:

select t.nombre, t.anio, (select v.value form Valor v where v.id=t.tipo) 作为tipo,(从Valor v 中选择v.value,其中 v.id=t.centro) 作为来自 Titulo 的中心

我尝试过做类似的事情,但它不起作用:

$query = trim($request->get('searchText'));

$titulos = DB::table('titulo as t')
    ->select('t.nombre','t.anio')
    ->DB::raw('(select v.value from Valor v where t.tipo = v.id) as tipo'))
    ->paginate(7);

你能帮帮我吗?

非常感谢,我读到了!

【问题讨论】:

  • Laravel 有一个很好的 ORM 可以用于关系。 HasOne、HasMany、BelongsTo 等
  • 这些表将不相关。 Value 表是我在数据库中没有与任何其他表相关的表,它是一个辅助表,将多种类型的数据分组,其余表都使用它。
  • 你需要写->DB::raw()而不是->selectRaw()

标签: php laravel subquery multiple-select


【解决方案1】:

你可以使用selectSub函数

$query = trim($request->get('searchText'));

$titulos = DB::table('titulo as t')

    ->select('t.nombre','t.anio')

    ->selectSub(function ($query) {
        $query->from('Valor')
            ->whereColumn('Valor.id', 'titulo.tipo')
            ->select('Valor.value')
            ->latest()
            ->take(1);
    }, 'tipo')

    ->selectSub(function ($query) {
        $query->from('Valor')
            ->whereColumn('Valor.id', 'titulo.centro')
            ->select('Valor.value')
            ->latest()
            ->take(1);
    }, 'centro')

    ->paginate(7);

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2013-07-09
    • 2020-05-07
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多