0

I am trying to correct an error in a search input in Vue + Laravel project.

For some reason, when more than one word is used in the search input the product is not displayed, but the projects that feature the products are.

For example: I have 4 types of desks: Desk Green, Desk, Desk Tall and Desk Grey. If I search for "Desk" the products will all be displayed and the interior design projects in which these desks are featured are also displayed. If I search for "Desk Green" specifically, the function returns an empty array of products, however the interior design projects that feature "Desk Green" are shown normally, even though the same functions are being used.

I am using two main functions which I will paste below. One is inside the Vue component and it´s called as soon as the component is mounted. This function uses axios to post data to the other function, which is in the controller. It seems that I am not able to use var_dump() or dd() in the controller function and I don´t know why. I am a begginer trying to work in a rather complex project, so it is a little difficult for me.

This is the funcion inside the component:

search(){
            let search = window.location.href.split('=');

            this.searchValue = search[1].replace('%20', ' ');

            search = search[1].replace('%20', '+').toLowerCase()            

            if(localStorage.getItem('userFormData')){
                let form = JSON.parse(localStorage.getItem('userFormData'));

                if(form.email){

                    this.emailClient = form.email;
                }
            }
            
            axios.post('search', {search : search, emailClient : this.emailClient})
            .then(response => {

                console.log(JSON.parse(JSON.stringify(response.data.products)))

                this.products      = JSON.parse(JSON.stringify(response.data.products))
                this.projects      = JSON.parse(JSON.stringify(response.data.projects))
                this.ebooks        = JSON.parse(JSON.stringify(response.data.ebooks))
                this.countProducts = response.data.countProducts
                this.countProjects = response.data.countProjects
                this.countEbooks   = response.data.countEbooks

            }).catch(error => {
                console.log(error)
            })
        }

This is the function in the controller:

public function searchFunction(Request $request)
    {
        try {

            $lang   = App::getLocale();
            $lang   = new LangMiddleware;
            $locale = $lang->getLocale();

            $search = $request->search;
            $search = str_replace('+', ' ', $search);

            if(Translations::where('group','LIKE','product%')->where('key','LIKE','%descSeo')->where('value', 'like', '%'.$search.'%')->where('locale', $locale)->exists()){
                $prodsArrayTrans = Translations::where('group','LIKE','product%')->where('key','LIKE','%descSeo')->where('value', 'like', '%'.$search.'%')->where('locale', $locale)->groupBy('group')->get();

                foreach($prodsArrayTrans as $key => $trans){
                    $product = explode('_', $trans->group);

                        $products = Products::with('categories')->where('id', $product[1])->where('visible', 1)->get();                    

                            $dataProducts[$key] = $products->map(function ($products) use ($locale) {
                                if($products->id_category != 5)
                                {
                                    $category = 'heritage';
                                }
                                else
                                {
                                    $category = 'graphic-lamps';
                                }

                                return [
                                    'id'          => $products->id,
                                    'name'        => $products->name,
                                    'nameSeo'     => trans($products->title_seo),
                                    'video'       => $products->video_url,
                                    'category'    => $products->categories->category,
                                    'description' => $products->description,
                                    'weight'      => $products->weight,
                                    'model'       => $products->model,
                                    'dimensions'  => $products->dimensions,
                                    'priceWW'     => $products->price_ww,
                                    'priceUSA'    => $products->price_usa,
                                    'titleSeo'    => $products->title_seo,
                                    'descSeo'     => trans($products->desc_seo),
                                    'keywordsSeo' => trans($products->keywords_seo),
                                    'bulbs'       => $products->bulbs,
                                    'certificate' => (bool)$products->ul_certificate,
                                    'new'         => (bool)$products->new,
                                    'contract'    => (bool)$products->contract,
                                    'onlineFlag'  => (bool)$products->online_flag,
                                    'onlineLink'  => $products->online_link,
                                    'image'       => $products->thumbnail,
                                    'imageAlt'    => $products->thumbnail_alt,
                                    'link'        => strtolower($category . '/' . $products->categories->category . '/' . str_replace(' ', '-', $products->name))
                                ];
                            });  

                }
            }else{
                $array = explode(' ', $search);

                $translationsArray = [];

                foreach ($array as $key => $value) {
                    if($value != ''){
                        if(Translations::where('value', 'like', '%'.$value.'%')->exists())
                        $translationsArray = Translations::where('value', 'like', '%'.$value.'%')->groupBy('group')->get();
                    }
                }
           
                if(count($translationsArray) > 0)
                {
                    foreach ($translationsArray as $key => $trans) {
                        if(strpos($trans->group, 'product') !== false)
                        {

                            $product = explode('_', $trans->group);

                            $products = Products::with('categories')->where('id', $product[1])->where('visible', 1)->get();


                                $dataProducts[$key] = $products->map(function ($products) use ($locale) {
                                    if($products->id_category != 5)
                                    {
                                        $category = 'heritage';
                                    }
                                    else
                                    {
                                        $category = 'graphic-lamps';
                                    }

                                    return [
                                        'id'          => $products->id,
                                        'name'        => $products->name,
                                        'nameSeo'     => trans($products->title_seo),
                                        'video'       => $products->video_url,
                                        'category'    => $products->categories->category,
                                        'description' => $products->description,
                                        'weight'      => $products->weight,
                                        'model'       => $products->model,
                                        'dimensions'  => $products->dimensions,
                                        'priceWW'     => $products->price_ww,
                                        'priceUSA'    => $products->price_usa,
                                        'titleSeo'    => $products->title_seo,
                                        'descSeo'     => trans($products->desc_seo),
                                        'keywordsSeo' => trans($products->keywords_seo),
                                        'bulbs'       => $products->bulbs,
                                        'certificate' => (bool)$products->ul_certificate,
                                        'new'         => (bool)$products->new,
                                        'contract'    => (bool)$products->contract,
                                        'onlineFlag'  => (bool)$products->online_flag,
                                        'onlineLink'  => $products->online_link,
                                        'image'       => $products->thumbnail,
                                        'imageAlt'    => $products->thumbnail_alt,
                                        'link'        => strtolower($category . '/' . $products->categories->category . '/' . str_replace(' ', '-', $products->name))
                                    ];
                                });  



                        }else{
                            $dataProducts = [];
                        }
                    }
                }else{

                    $dataProducts = [];
                }
            }

            if(Translations::where('group','LIKE','project%')->where('key','LIKE','%details')->where('value', 'like', '%'.$search.'%')->where('locale', $locale)->exists()){
                $projectsArrayTrans = Translations::where('group','LIKE','project%')->where('key','LIKE','%details')->where('value', 'like', '%'.$search.'%')->where('locale', $locale)->groupBy('group')->get();
                foreach($projectsArrayTrans as $key => $trans){
                    $project = explode('_', $trans->group);

                        $projects = Projects::where('id', $project[1])->get();

                        $dataProjects[$key] = $projects->map(function ($projects) {
                            return [
                                'id'       => $projects->id,
                                'name'     => $projects->name,
                                'image'    => $projects->cover,
                                'imageAlt' => trans($projects->cover_alt),
                                'preview'  => trans($projects->details_preview),
                                'title'    => trans($projects->name),
                                'subTitle' => trans($projects->subTitle)
                            ];
                        });
                }
            }else{
                $array = explode(' ', $search);

                $translationsArray = [];

                foreach ($array as $key => $value) {
                    if($value != ''){
                        if(Translations::where('value', 'like', '%'.$value.'%')->exists())
                        $translationsArray = Translations::where('value', 'like', '%'.$value.'%')->groupBy('group')->get();
                    }
                }         

                if(count($translationsArray) > 0)
                {
                    foreach ($translationsArray as $key => $trans) {
                        if(strpos($trans->group, 'project') !== false)
                        {
                            $project = explode('_', $trans->group);

                            $projects = Projects::where('id', $project[1])->get();

                            $dataProjects[$key] = $projects->map(function ($projects) {
                                return [
                                    'id'       => $projects->id,
                                    'name'     => $projects->name,
                                    'image'    => $projects->cover,
                                    'imageAlt' => trans($projects->cover_alt),
                                    'preview'  => trans($projects->details_preview),
                                    'title'    => trans($projects->name),
                                    'subTitle' => trans($projects->subTitle)
                                ];
                            });



                        }else{
                            $dataProjects = [];
                        }
                    }
                }else{

                    $dataProjects = [];
                }
            }


            if(Translations::where('group','LIKE','ebook%')->where('key','LIKE','%details')->where('value', 'like', '%'.$search.'%')->where('locale', $locale)->exists()){
                $ebooksArrayTrans = Translations::where('group','LIKE','ebook%')->where('key','LIKE','%details')->where('value', 'like', '%'.$search.'%')->where('locale', $locale)->groupBy('group')->get();
                foreach($ebooksArrayTrans as $key => $trans){
                    $ebook = explode('_', $trans->group);


                        $ebooks = Ebooks::where('id', $ebook[1])->get();


                        $dataEbooks[$key] = $ebooks->map(function($ebooks)use ($locale){
                            return [
                                'id'       => $ebooks->id,
                                'name'     => trans($ebooks->name),
                                'details'  => trans($ebooks->details),
                                'image'    => trans($ebooks->img),
                                'imageAlt' => trans($ebooks->alt)
                            ];
                        });
                }
            }else{
                $array = explode(' ', $search);

                $translationsArray = [];

                foreach ($array as $key => $value) {
                    if($value != ''){
                        if(Translations::where('value', 'like', '%'.$value.'%')->exists())
                        $translationsArray = Translations::where('value', 'like', '%'.$value.'%')->groupBy('group')->get();
                    }
                }
           
                if(count($translationsArray) > 0)
                {
                    foreach ($translationsArray as $key => $trans) {


                        if(strpos($trans->group, 'ebook') !== false)
                        {

                            $ebook = explode('_', $trans->group);



                            $ebooks = Ebooks::where('id', $ebook[1])->get();


                            $dataEbooks[$key] = $ebooks->map(function($ebooks)use ($locale){
                                return [
                                    'id'       => $ebooks->id,
                                    'name'     => trans($ebooks->name),
                                    'details'  => trans($ebooks->details),
                                    'image'    => trans($ebooks->img),
                                    'imageAlt' => trans($ebooks->alt)
                                ];
                            });




                        }else{
                            $dataEbooks = [];
                        }
                    }
                }else{
                    $dataEbooks = [];
                }
                
            }       

      
            $countProducts = count($dataProducts);
            $countProjects = count($dataProjects);
            $countEbooks   = count($dataEbooks);


            if($countProducts > 0){
                $flagProducts = 1;
            }else{
                $flagProducts = 0;
            }

            if($countProjects > 0){
                $flagProjects = 1;
            }else{
                $flagProjects = 0;
            }

            if($countEbooks > 0){
                $flagEbooks = 1;
            }else{
                $flagEbooks = 0;
            }


            $keywords                   = new SearchKeyword;
            $keywords->email            = $request->emailClient;
            $keywords->locale           = $locale;
            $keywords->keyword          = $search;
            $keywords->products_results = $flagProducts;
            $keywords->projects_results = $flagProjects;
            $keywords->ebooks_results   = $flagEbooks;
            $keywords->save();


            return response()->json([
                                        'products'      => $dataProducts,
                                        'projects'      => $dataProjects,
                                        'ebooks'        => $dataEbooks,
                                        'countProducts' => $countProducts,
                                        'countProjects' => $countProjects,
                                        'countEbooks'   => $countEbooks,
                                    ]);
            
        } catch (Exception $e) {
            return response()->json($e->getMessage(), 500);
        }
    }

I would really appreciate any suggestions. Thank you in advance.

mlila_p
  • 111
  • 14
  • 2
    If you're using `return response()->json()` as your Controller's return method, avoid using `dd()` as that will end execution and return that output as a response. If you want to debug a variable, like `dd($variable)`, instead do `return response()->json($variable)` and inspect it in JavaScript. Or, use `\Log::info($variable);` to log it to your `storage/logs/laravel.log`. If that still doesn't work for you, perform a `POST` request from an HTML `
    `, as that will allow you to view the `dd()` output properly.
    – Tim Lewis Aug 24 '21 at 17:15
  • 1
    Thank you so much for your response! I will try your suggestions! Thanks again :) – mlila_p Aug 25 '21 at 09:08
  • 1
    return response()->json($variable) worked really well for me, thank you. – mlila_p Aug 27 '21 at 13:56

0 Answers0