wyszukiwanie w tablicy za pomocą atrybutów podanych z tablicy przez klienta LARAVEL

0

Witam

w pewnym projekcie na Laravelu dopisuje pewną funkcje w repozytorium z produktem. Chodzi o to żeby klient wpisywał sobie pewne atrybuty np kolor, rozmiar , itd. Funkcja ma porównać tablice podaną przez klienta (na razie nie ma żadnego interfejsu klienta wchodzi czysta teoretyczna tablica) z tablicą z produktami (produkty w mongo db). Tablica ma zagnieżdżone elementy. System tworzy kolekcje produktów i zwraca ją jako tablice. Tzn chodzi o to że jak klient wpisze np kolor niebieski to przyporządkuje w tej nowej tablicy wszystkie produkty z kolorem niebieskim (jeśli istnieją). Generalnie w bazie są duże tablice zagnieżdzone i trzeba operować na ich kluczach. np podczas przypisywania do zbioru zgodności wartości można użyć klucza WARTOŚĆ_SZEROKOŚCI_PRODUKTU___WARTOŚĆ_KOLORU_PRODUKTU, do którego przypisane zostaną produkty.
Tutaj przykład tablicy podanej przez użytkownika ['main.dimensions.width', 'main.visual.colors'] itd.

public function CheckArrayData ($values,  $attribute )
    {
        // pobieram sobie wszystkie produkty z mojej bazy z produktem
        $products = Product::get();
        // spraawdzam iteruje produkty
        foreach($products as $id => $product) {
            // iteruje po tym co wpisał user w tablicy
             foreach($values as $v) {
                 //sprawdzam czy atrybut istnieje w produktach
                 if(isset($product->{$attribute})) {
                      
                   // jesli istnieje to tutaj chcialbym stworzyc klucz tablicy 
                     // czyli stworzyc string, zlozony z wartosci parametrow uzytkownik
                 }
                   // potem trzeba przyporządkować elementy do tablicy wynikowej wg klucza utworzonego powyżej

   
 
             // jakiś pomysł jak to zrobic? skorzystać z implode? in_array ? czy jakieś inne funkcje rozwiazania w Laravel? 


3

Troszkę wygląda to na zły pomysł ogólnie. Nie korzystam z Mongo, ale pobieranie wszystkich rekordów o produktach do pamięci zamiast wyfiltrowanie ich na etapie zapytania? Jak będziesz miał prawidłowo wyfiltrowane rekordy to przecież wystarczy je pogrupować. Potem możesz sobie coś łatwo porównać po kluczach zamiast wykonywać 500 razy in_array() w pętli. Pomyśl jeszcze o zasobach i wydajności, a nie tylko o tym jaką tablicę wynikową chcesz uzyskać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1