Giriş yapmadınız.

#1 08.01.2019 04:21:30

potti
Üye
Kayıtlı: 24.09.2018
Mesajlar: 70

selectBox ile Blade'de sort islemi

Hali hazirda controller icerisinde "sortBy" seklinde uygulayip Blade'de yolluyorum.
fakat bunun disinda kullanici icinde sort opsiyonu saglamak istiyorum, yalniz su anki controller'in icine
blade'deki select box'i nasil pass edecegim konusunda bocaliyorum.

Controller:

public function search(Request $request)
    {
        $q = $request->q;

        $estates = \DB::table('allestates')
            ->where('lat', '!=', '')
            ->where('lng', '!=', '')
            ->where('price', '!=', '')
            ->where(function($query) use ($q) {
                $query->where("building_name", "LIKE", "%" . $q . "%")
                    ->orWhere("address", "LIKE", "%" . $q . "%")
                    ->orWhere("company_name", "LIKE", "%" . $q . "%")
                    ->orWhere("region", "LIKE", "%" . $q . "%");
            })

            ->orderBy('price')->paginate(8);

        return view("home", compact('estates', 'q'));
    }

Blade:

 
<select title="Pick a number" class="selectpicker" name="sortby">
        <option>Fiyata Gore</option>
        <option>Ucuz</option>
        <option>Pahali</option>
</select>
<select title="Pick a number" class="selectpicker" name="sortby">
        <option>Bolge'ye Gore</option>
        <option>Tokyo</option>
        <option>Osaka</option>
 </select>

option'lara Value degeri atayacagiz. Yalniz, value'lari mevcut controller icinde nasil kullanacagiz?

Çevrimdışı

#2 08.01.2019 09:12:07

Kevin-Mitnick
Üye
Kayıtlı: 26.05.2016
Mesajlar: 469

Yanıt: selectBox ile Blade'de sort islemi

Anladığımı yazıyorum tam anlamamakla beraber . Şimdi şehirlerin id leri optionların valulerına gelicek.
1-Tokyo
2-Osaka gibi

ID yi yolladıktan sonra size lazım olan Join leyip şehir tablosu ile estates tablosu arasında ilişki olduğunu var sayıyorum.

 DB tableden sonra  =>>>  ->join('sehir', 'sehir.id', '=', 'estates.sehir_id')  

dedikten sonra aşağıda

  ->->orWhere("sehir.id", "LIKE", "%" . $q . "%")   

  deyip sehirleri de aynı mantıkla kullanabilirsiniz.


Mister Koder

Çevrimdışı

#3 08.01.2019 09:40:21

potti
Üye
Kayıtlı: 24.09.2018
Mesajlar: 70

Yanıt: selectBox ile Blade'de sort islemi

Ben biraz daha anlasilir yazmaya calisayim : )
Mevcut durumda gordugunuz gibi search box var ve search box'a verdigim degerlerde arama yapiliyor.
Ayni zamanda search box'dan ayri olarak bir de selectBox koymak istiyorum. Ornegin selectBox'dan secilen sehirleri
gostermesi ya da fiyatta siralama, yuksekten alcaga veya alcaktan yuksege seklinde gibi sort etmesi.

Son düzenleyen potti (08.01.2019 09:40:48)

Çevrimdışı

#4 08.01.2019 09:41:58

Kevin-Mitnick
Üye
Kayıtlı: 26.05.2016
Mesajlar: 469

Yanıt: selectBox ile Blade'de sort islemi

Peki bunu tıkladığı anda mı yapması lazım yoksa herhangi bir butona basması lazım mı ?


Mister Koder

Çevrimdışı

#5 08.01.2019 10:28:45

potti
Üye
Kayıtlı: 24.09.2018
Mesajlar: 70

Yanıt: selectBox ile Blade'de sort islemi

1'den fazla selectBox olacagi icin button ile haraket etmesi daha mantikli.
secilimler yapildiktan sonra button ile sort islemenin baslatilmasi daha iyi olur.

Çevrimdışı

#6 08.01.2019 11:18:43

Kevin-Mitnick
Üye
Kayıtlı: 26.05.2016
Mesajlar: 469

Yanıt: selectBox ile Blade'de sort islemi

size anlattığımı yaparsanız sort edebilirsiniz rahat bir şekilde.


Mister Koder

Çevrimdışı

#7 08.01.2019 12:05:55

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,591
Website

Yanıt: selectBox ile Blade'de sort islemi

<input name="q" type="text">
<select name="sortbyprice">...</select>
<select name="region">...</select>
public function search(Request $request)
{
    $q = $request->q;
    $sortbyprice = $request->sortbyprice;
    $region = $request->region;

    // Birden fazla sayfa oluştuğunda diğer sayfaya geçerken filtreleri de taşımak için
    // filtreleri bu değişkende tutacağız
    $paginationData = [
        'q' => $q
    ];

    $estates = \DB::table('allestates')
        ->where('lat', '!=', '')
        ->where('lng', '!=', '')
        ->where('price', '!=', '')
        ->where(function($query) use ($q) {
            $query->where("building_name", "LIKE", "%" . $q . "%")
                ->orWhere("address", "LIKE", "%" . $q . "%")
                ->orWhere("company_name", "LIKE", "%" . $q . "%")
                ->orWhere("region", "LIKE", "%" . $q . "%");
        })
        ->when($sortbyprice, function($query, $order) use ($paginationData) {
            if(!in_array($order, ['asc','desc'])) {
                $order = 'asc';
            }

            $paginationData['sortbyprice'] = $order;

            return $query->orderBy('price', $order);

        }, function() {
            // Sıralama belirtilmemişse standart sıralama bu şekilde:
            return $query->orderBy('price');
        })
        ->when($region, function($query, $regionId) use ($paginationData) {
            $paginationData['region'] = $regionId;
            return $query->where('region_id', $regionId);
        })
        ->paginate(8);

    // Boş değerleri temizliyoruz
    $paginationData = array_filter($paginationData);

    return view("home", compact('estates', 'q','paginationData'));
}

Arama sonuçlarının olduğu sayfa sayfalama linkleri oluşturulurken:

{{ $estates->appends($paginationData)->links() }}

when kullanımı için:
https://laravel.com/docs/5.7/queries#co … al-clauses

Çevrimdışı

#8 09.01.2019 02:42:42

potti
Üye
Kayıtlı: 24.09.2018
Mesajlar: 70

Yanıt: selectBox ile Blade'de sort islemi

mgsmus, cevap icin cok tesekkurler, yalniz 2 sorunla karsilastim.
Birincisi bu query undefined olarak gorunuyor.

// Sıralama belirtilmemişse standart sıralama bu şekilde:
 return $query->orderBy('price');

ikinci problem ise; blade'i bu sekilde duzeledim.

<select name="sortbyprice">
       <option value="asc">Lowest First</option>
       <option value="desc">Highest First</option>
</select>
<select name="region">
      <option value="tokyo">Tokyo</option>
      <option value="osaka">Osaka</option>
</select>
<input name="q" type="button">

fakat input button'una bastigim da arama baslamiyor.
Value'lar, database'deki region row'unun icindeki datalar.

Ek olarak: daha once yaptigim search box'da ise sikinti yok.

$query->where("building_name", "LIKE", "%" . $q . "%")
                    ->orWhere("address", "LIKE", "%" . $q . "%")
                    ->orWhere("company_name", "LIKE", "%" . $q . "%")
                    ->orWhere("region", "LIKE", "%" . $q . "%");

Su kisim dahilinde search Box'da arama yaptigimda sonuclari veriyor.

Son düzenleyen potti (09.01.2019 02:47:49)

Çevrimdışı

#9 09.01.2019 10:07:35

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,591
Website

Yanıt: selectBox ile Blade'de sort islemi

query undefined dediğiniz kısımda function($query) olacak, yazmayı unutmuşum.

Diğer kısımda ise; bir adet formunuz olacak, search sayfasına GET ile formu gönderecek. q sizin arama metninizi taşıyan input ama siz onu button yapmışsınız, o text olmalı.

<form action="/search">
    <input name="q" type="text">
    <select name="sortbyprice">...</select>
    <select name="region">...</select>

    <button type="submit">Ara</button>
</form>

gibi olacak.

Çevrimdışı

#10 09.01.2019 10:58:09

potti
Üye
Kayıtlı: 24.09.2018
Mesajlar: 70

Yanıt: selectBox ile Blade'de sort islemi

cok tesekkurler buyuk yardiminiz sayesinde halloldu.

Çevrimdışı

Forum alt kısmı