如何在Laravel 6中进行多个子查询?

问题描述

我正在使用PHP和Laravel 6,并且需要查询多个子查询。子查询在同一张表上,我无法通过联接来完成(或者我无法想到一种方法)。

我需要执行以下查询

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

我试图做类似的事情,但是没有用:

$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);

你能帮我吗?

非常感谢,我读了你!

解决方法

您可以使用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);