问题描述
我正在使用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);