复杂查询 Laravel

Complex query Laravel

嗨,我有一个复杂的问题

SELECT distinct libelle_adresse from adresse 
where id_adresse in (select id_adresse from zone_adresse 
where fk_zone in (select id_zone from zone 
where id_arrondissement in (select id_arrondissement from arrondissement
where libelle_arrondissement="'.$_GET['arrondis'].'")))

我已经使用 $arrondis = $request->input('arrondis'); 从 URL 获取 "arrondis" 参数并将其传递给我的控制器。

这是我的尝试

    $term = $request->term;

    $arrondis = $request->input('arrondis');

    $query1 = DB::table('arrondissement')
    ->select('id_arrondissement')
    ->where('libelle_arrondissement','=',$arrondis)
    ->get();

    $query2 = DB::table('zone');
    ->select('id_zone')
    ->where('id_arrondissement','=',$query1)
    ->get();

    $query3 = DB::table('zone_adresse');
    ->select('id_adresse')
    ->where('fk_zone','=',$query2)
    ->get();

    $queries = DB::table('adresse');
    ->where('id_adresse','=',$query3)
    ->where('libelle_adresse','like','%'.$term.'%')
    ->take(3)->get();
    foreach ($queries as $query)
    {
        $results[] = ['id' => $query->id_adresse, 'value' => $query->libelle_adresse]; 
    }
    return response()->json($results);

我知道在 "where" 中传递 "query(1/2/3) variable" 时出现错误,但我找不到任何解决方案

如有任何帮助,我们将不胜感激。谢谢

我认为您显示的查询比您需要的复杂得多。

SELECT distinct libelle_adresse 
FROM adresse as a
INNER JOIN zone_address as za ON a.id_adresse = za.id_adress
INNER JOIN zone as z ON za.fk_zone = z.id_zone
INNER JOIN arrondissement as arr ON arr.id_arrondissement = z.id_arrondissement
Where libelle_arrondissement="'.$_GET['arrondis'].'")))

因为我没有 table 结构细节,所以我在字段前面使用的标签可能有误。但是这个请求是一样的,更容易处理。

因为关于 laravel join 的文档充满了例子。我希望这足以帮助你。

试试这个

DB::table("adresse")
    ->whereIn("id_adresse", DB::table("zone_adresse")
       ->whereIn("fk_zone", DB::table("zone")
         ->whereIn("id_arrondissement", DB::table("arrondissement")
           ->where("libelle_arrondissement","=", $_GET['arrondis'])
           ->pluck("id_arrondissement")->toArray()
        )
         ->pluck("id_zone")->toArray()
    )->pluck("id_adresse")->toArray())
    ->distinct()
    ->select("libelle_adresse as value, id_adresse as id")
    ->where('libelle_adresse', 'like', '%'.$term.'%') 
    ->get();

这将帮助您将所有查询整合到一起。但这看起来很难看(虽然会解决问题)。我推荐的最好的是使用 Eloquent