laravel在查询关系表时选择表的certian列

时间:2019-07-29 09:09:48

标签: laravel laravel-5 eloquent

用户可以发送搜索参数,它可以是城市名称或酒店名称。 我想在酒店表和城市表中进行搜索,并且只想在任何结果中仅发回酒店名称和城市名称作为响应。 在我的查询中,它仅返回酒店名称,但城市的数据为空,为什么? 我该如何处理?

酒店和城市有关系

在酒店模型中,我有:

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}]}

1 个答案:

答案 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  

对于简单和小型查询,关系很好。