Giriş yapmadınız.

Duyuru

TÜRKÇE KİTAP DUYURUSU:
Laravel 5 : Laravel 5.1 Güzelliği (Türkçe)
Vue.js 2 : Vue.js 2 Majesteleri (Türkçe)

#1 12.06.2018 03:57:37

GkyKrkc
Üye
Yer: Seyyah
Kayıtlı: 04.04.2017
Mesajlar: 211

Kategori ve alt kategoriye ait ürünleri listelemek

Merhabalar
Mevcut kategoriye tıkladığım zaman, hem mevcut kategori ürünlerinin hemde  alt kategoriye ait ürünlerinde tamamının listelenmesini istiyorum. biraz araştırma yaptım ama bir mantık geliştiremedim view kısmını nasıl oluşturmalıyım ? yardımcı olursanız sevinirim.
bunun için Categoriy tablom şöyle :
id  | name        | parent_id
1   | Bilgisayar | 0
2   |Telefon      | 0
3   | Masaüstü | 1
4   | Dizüstü     | 1
5   | Toshiba    | 4
6   | A-600       | 5

Category Model

public function products()
    {

        return $this->hasMany('App\Product','category_id');
    }
    public function parent()
    {
        return $this->belongsTo('App\Category', 'parent_id');
    }

    public function children()
    {
        return $this->hasMany('App\Category', 'parent_id');
    }

route

Route::get('Kategori_Urun/{id}', '[email protected]');

Product Model

public function category()
    {
        return $this->belongsTo('App\Category');
    }

Controller

public function deneme($id)
    {
       $category=\App\Category::find($id);
       return view('wg.category.urunler',compact('category'));
    }
 

Çevrimdışı

#2 13.06.2018 15:42:25

GkyKrkc
Üye
Yer: Seyyah
Kayıtlı: 04.04.2017
Mesajlar: 211

Yanıt: Kategori ve alt kategoriye ait ürünleri listelemek

Hethangi bir fikri olan yok mu arkadaşlar

Çevrimdışı

#3 13.06.2018 17:17:13

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

Yanıt: Kategori ve alt kategoriye ait ürünleri listelemek

Nested Set kullanmaktan neden vazgeçtiniz? Bence internette Nested Set vs Adjacency List şeklinde aratıp karşılaştırmaları inceleyin derim. Sonradan karşılaşacağınız sorunları şimdiden bilin.

Önce istediğiniz kategori ve tüm alt kategorilerinin idlerini recursive olarak bir diziye işleyeceksiniz. Yani elinizde [1,2,5,12,13,14,24,25,33] gibi bir dizi olacak. Sonra

$data = [1,2,5,12,13,14,24,25,33];
$products = Product::whereIn('category_id', $ids)->get();

Bu diziyi elde etmek için izlenecek yollar (en azından benim için) biraz sıkıntılı. O yüzden şu paketin kodlarına bakabilirsiniz:
https://github.com/BlueM/Tree

Çevrimdışı

#4 13.06.2018 20:54:49

GkyKrkc
Üye
Yer: Seyyah
Kayıtlı: 04.04.2017
Mesajlar: 211

Yanıt: Kategori ve alt kategoriye ait ürünleri listelemek

http://forum.laravel.gen.tr/viewtopic.php?id=2771 üstadım burada aslında genel mantığını anlatmışsınız, çokda güzel bir mantık yani ürün tek dahi olsa varyantını ayrıca ekleyin demişsiniz ,şimdi migrasyonlarımı ona göre düzenliyorum , bu kez sorum şu  https://github.com/lazychaser/laravel-nestedset  nestedset ile ürünlerimizi sıralarken yani kategoriye tıkladığımızda alt kategorilerdeki ürünlerinde sıralanmasını nasıl çözüyosun , model  controller ve view de nasıl bir kod çalıştırıyorsun, benim sistemimde  sınırsız kategori mantığı ile çalışıyor, rica etsem  daha önceki projelerinde bir örnek paylaşabilirmisin, yada lazychaser in nestedset ile çalışan bir ürün ekleme ve sıralama örneği yapar mısın  hem formumuz adına da güzel bir paylaşım olur.

Son düzenleyen GkyKrkc (13.06.2018 21:00:31)

Çevrimdışı

#5 13.06.2018 21:10:06

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

Yanıt: Kategori ve alt kategoriye ait ürünleri listelemek

Nested seti sadece kategoriler için kullanıyorum, ürünler ile bir bağı yok. Yani nested set ile ürünleri sıralamıyorum. Ne tür bir sıralamadan bahsediyorsunuz?

Çevrimdışı

#6 13.06.2018 21:26:23

GkyKrkc
Üye
Yer: Seyyah
Kayıtlı: 04.04.2017
Mesajlar: 211

Yanıt: Kategori ve alt kategoriye ait ürünleri listelemek

anladım ben zannettim ki oluşturulan kategorilere göre tıklandığı zaman ürünleride otomatik sıralıyor sandım smile)  ben nestedset için https://github.com/atayahmet/laravel-nestable bunu kullanıyorum yani kategoriler tarafı tamamdır, orada bir sorunum yok, ama ürünler ve varyantlar kısmını senin önerdiğin gibi düzeltiyorum.   şimdi ilk soruma tekrar dönüyorum smile) çünkü yukarıda önermiş olduğun, parent_id leri yazdırabileceğim  rucursive diziyi oluşturamadım, bu konuda yardımcı olabilirmisin ?

$data = [1,2,5,12,13,14,24,25,33];
$products = Product::whereIn('category_id', $ids)->get(); //

// Ana kategorimin parent_id si "0 "
bu aşağıda yaptığımda parentleri diziye aktaramadım smile)

function parentler($id)
        {
            $parent = \App\Category::find($id)->parent_id;
             if($parent==0){
                 return  $id=$id;
             }else{
                return parentler($parent);
             }
        }
       echo  parentler($id);

Son düzenleyen GkyKrkc (13.06.2018 21:33:40)

Çevrimdışı

#7 14.06.2018 00:38:27

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

Yanıt: Kategori ve alt kategoriye ait ürünleri listelemek

Sizin verdiğiniz paket farklı bir iş için. Bunu kullanmıyor musunuz:
https://github.com/lazychaser/laravel-nestedset

Çevrimdışı

#8 14.06.2018 00:50:00

GkyKrkc
Üye
Yer: Seyyah
Kayıtlı: 04.04.2017
Mesajlar: 211

Yanıt: Kategori ve alt kategoriye ait ürünleri listelemek

Sanırım Meseleyi Çözdüm
Controller php içerisine recursive bir fonksiyon ekledim

public function parentler($category){
        $ids = [];
        foreach ($category->children as $cat) {
            $ids[] = $cat->id;
            $ids = array_merge($ids, $this->parentler($cat));
        }
        return $ids;
    }

daha sonra ürün  listelemek istediğim controllerdeki fonksiyonu aşağıdaki gibi oluşturdum.

 public function urunler($id)
    {
        $parent = \App\Category::find($id);
        $data = $this->parentler($parent);
        array_push($data, $id);

     return $urunler=DB::table('products')->whereIn('category_id', $data)->get();  

    }

bu şekilde meseleyi çözmüş oldum vatana millete hayırlı olsun smile) emekleriniz için çok teşekkür ederim recursive fonksiyon işi çok işimi gördü

Son düzenleyen GkyKrkc (14.06.2018 01:56:11)

Çevrimdışı

Forum alt kısmı