嗨,我有一个复杂的查询
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');
来获取" arrondis"来自URL的参数并将其传递给我的控制器。
这是我的尝试
$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);
我知道当我通过"查询(1/2/3)变量时,我得到错误"在"其中"但我无法找到任何解决方案
任何帮助将不胜感激。感谢
答案 0 :(得分:0)
我认为您展示的查询是否比您需要的要复杂得多。
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'].'")))
由于我没有表结构细节,我可能在我在场前使用的标签中犯了错误。但是这个请求也是这样做的,并且更容易处理。
因为关于laravel join的文档很充实。我希望这足以帮助你。
答案 1 :(得分:0)
试试这个
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