Привет всем: я как-то застрял с чем-то.
Проблема : я пытаюсь с помощью HTML-формы создать функцию поиска для моей модели "Свойство". Существует несколько фильтров, например price
, property_type
и т. Д. Один из главных фильтров, где находится этот Property.php
; A property_type
может быть warehouse
, house
, apartment
. Это главная проблема; house
принадлежит Neighborhood.php
, но apartment
принадлежит Building.php
, а Building.php
принадлежит Neighborhood
.
И другие слова:
- а) Если это дом: Недвижимость-> Район () -> Город ()
- б) Если это квартира: Недвижимость-> Здание () -> Район () -> Город ()
Мои модели
// Property.php
class Property extends Model{
public function building()
{
return $this->belongsTo('App\Building');
}
public function neighborhood()
{
return $this->belongsTo('App\Neighborhood');
}
}
<!-- The search form -->
<form method="GET" action="{{route('property.search')}}">
{{ csrf_field() }}
<select class="form-control" name="city_id" id="city" data-required>
<option value="">Select a state</option>
@foreach($cities as $city)
<option value="{{ $city->id }}"{{ old('city_id') == $city->id ? ' selected' : '' }}>{{ $city->name }}</option>
@endforeach
</select>
<select class="form-control property_type" name="property_type"
id="property_type"
data-required>
<option value="">Select an option</option>
<option value="house" {{ old('property_type') == 'house' ? ' selected' : '' }}>House</option>
<option value="apartament" {{ old('property_type') == 'apartament'? ' selected' : '' }}>Apartament
</select>
<!-- some other filters -->
<input type="checkbox" id="sell" name="sell"><label>Venta</label>
<input type="checkbox" id="rent" name="rent"><label>Arriendo</label>
<button type="submit" class="btn btn-primary">Buscar</button>
</form>
// My PropertyController
public function search(PropertySearchRequest $request)
{
$data['cities'] = City::all();
$prices = explode(",", $request->price);
/*Obtener por rango de precio*/
$properties = Property::where('price', '>=', $prices[0])
->where('price', '<=', $prices[1])
->where('property_type', $request->property_type);
if($request->rent == 'on' && $request->sell == 'on'){
$data['properties'] = $properties->paginate(8);
return view('properties.search', $data);
}
if($request->rent == 'on'){
$propiedades = $properties->where('rent', true);
$data['properties'] = $properties->paginate(8);
return view('properties.search', $data);
}
if($request->sell == 'on'){
$properties = $properties->where('sell', true);
$data['properties'] = $properties->paginate(8);
return view('properties.search', $data);
}
}
Как видите, я могу фильтровать все, кроме города, к которому относится препорт
ВОПРОС: КАК Я ДОЛЖЕН ДОСТИГНУТЬ ЭТО И ПРИНЦИПИРОВАТЬ РЕЗУЛЬТАТ В ВИДЕ?
Первый подход:
$properties = $properties->filter(function ($property, $key) use ($request) {
if ($property->building_id) {
return $propiedad->building()->first()->neighborhood()->first()->city()->first()->id == $request->city_id;
} else {
return $propiedad->neighborhood()->first()->city()->first()->id == $request->city_id;
}
});
Но я не мог разбить это на страницы
Кто-нибудь может мне помочь, пожалуйста?