用户可以发送搜索参数,它可以是城市名称或酒店名称。 我想在酒店表和城市表中进行搜索,并且只想在任何结果中仅发回酒店名称和城市名称作为响应。 在我的查询中,它仅返回酒店名称,但城市的数据为空,为什么? 我该如何处理?
酒店和城市有关系
在酒店模型中,我有:
public function city()
{
return $this->belongsTo(City::class);
}
在城市模型中:
public function hotel()
{
return $this->hasMany(Hotel::class);
}
我在相关控制器中的查询:
$hotels = Hotel::with('city')->select('name')->where('name', 'like', '%' . $request->target . '%')
->orWhereHas('city', function ($query) use ($request) {
$query->where('name', 'like', '%' . $request->target . '%');
})
->orderBy('id')
->take(10)->get();
return response()->json(['result' => $hotels]);
,响应为:
{"result":[{"name":"venus","city":null}]}
答案 0 :(得分:0)
它将更加清晰,更快:
$searchName = $request->target;
$hotels = Hotel::select('hotel.name as name', 'city.name as city')
->leftJoin('city', 'city.id', 'hotel.city_id')
->where('hotel.name', 'like', '%' . $searchName . '%')
->orWhere('city.name', 'like', '%' . $searchName . '%')
->orderBy('hotel.id')
->take(10)
->get();
return ['result' => $hotels]; //Laravel decode to Json if the request AJAX
对于简单和小型查询,关系很好。