复杂查询 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
嗨,我有一个复杂的问题
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