Как отфильтровать запрос поиска с Laravel и Collection - PullRequest
0 голосов
/ 21 марта 2019

Привет всем: я как-то застрял с чем-то.

Проблема : я пытаюсь с помощью 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;
            }

        });

Но я не мог разбить это на страницы

Кто-нибудь может мне помочь, пожалуйста?

...