{"flag":true,"single":true,"pageTitle":"Add to favorite item laravel tutorial","post":{"id":28,"user_id":"1","slug":"add-to-favorite-item-laravel-tutorial-tbgo","title":"Add to favorite item laravel tutorial","body":"<ol>\r\n<li>add to fav button in view ie jobs.blade.php<\/li>\r\n<\/ol>\r\n<pre class=\"language-markup\"><code>&lt;button type=\"button\" class=\"add_to_fav btn btn-block apply_btnis\" data-id=\"{{$job-&gt;id}}\" data-table=\"data_jobs\"&gt; Faverite it \r\n   &lt;i class=\"far fa-heart @if($job-&gt;is_fav) fas @endif\"&gt;&lt;\/i&gt;\r\n&lt;\/button&gt;<\/code><\/pre>\r\n<p>2. Add javascript code for ajax request in jobs.blade.php<\/p>\r\n<pre class=\"language-markup\"><code>&lt;script type=\"text\/javascript\"&gt;\r\n  js_click(\".add_to_fav\", function() {\r\n\r\n    var product_id = attr(this,\"data-id\");\r\n    var table_name=attr(this,\"data-table\");\r\n    var element = this;\r\n      js_ajax('\/add_fav', 'POST', {'_token': '&lt;?php echo csrf_token() ?&gt;',user_id: '{{auth()-&gt;id()}}', table_name: table_name,product_id:product_id}, function(response) {\r\n        var resp = JSON.parse(response);\r\n        if(resp.flag){\r\n            var message = resp.message;\r\n            if(message==\"added\"){\r\n                addClass(\".add_to_fav[data-id='\"+product_id+\"'] i\",\"fas\");\r\n            }else{\r\n                removeClass(\".add_to_fav[data-id='\"+product_id+\"'] i\",\"fas\");\r\n            }\r\n        }\r\n      }, function(error) {\r\n      console.error(error);\r\n    });\r\n  });\r\n\r\n\r\n  function js_ajax(url, method, data, successCallback, errorCallback) {\r\n\t  const xhr = new XMLHttpRequest();\r\n\t  xhr.open(method, url);\r\n\t  xhr.setRequestHeader('Content-Type', 'application\/json');\r\n\t  xhr.onload = function() {\r\n\t    if (xhr.status === 200) {\r\n\t      successCallback(xhr.responseText);\r\n\t    } else {\r\n\t      errorCallback(xhr.statusText);\r\n\t    }\r\n\t  };\r\n\t  xhr.onerror = function() {\r\n\t    errorCallback(xhr.statusText);\r\n\t  };\r\n\t  xhr.send(JSON.stringify(data));\r\n\t}\r\n\r\n\tfunction attr(element, attribute, value) {\r\n\t  if (typeof value === 'undefined') {\r\n\t    return element.getAttribute(attribute);\r\n\t  } else {\r\n\t    element.setAttribute(attribute, value);\r\n\t    return element;\r\n\t  }\r\n\t}\r\n\t\t\r\n\tfunction addClass(selector, className) {\r\n\t  const elements = document.querySelectorAll(selector);\r\n\t  elements.forEach(element =&gt; {\r\n\t    element.classList.add(className);\r\n\t  });\r\n\t}\r\n\r\n\tfunction removeClass(selector, className) {\r\n\t  const elements = document.querySelectorAll(selector);\r\n\t  elements.forEach(element =&gt; {\r\n\t    element.classList.remove(className);\r\n\t  });\r\n\t}\r\n&lt;\/script&gt;<\/code><\/pre>\r\n<p>3. Add Route to add new item or remove<\/p>\r\n<pre class=\"language-markup\"><code>Route::controller(\\App\\Http\\Controllers\\APIController::class)-&gt;group( function () {\r\n    Route::post('\/add_fav','add_to_fav')-&gt;name('add_fav');\r\n});<\/code><\/pre>\r\n<p>4. Add controller code ie apiController.php<\/p>\r\n<pre class=\"language-markup\"><code>public function add_to_fav(Request $request){ \/\/add to fav if already exit remove fav\r\n        $validatedData = $request-&gt;validate([\r\n            'product_id' =&gt; 'required',\r\n            'table_name' =&gt; 'required'\r\n        ]);\r\n        if(auth()-&gt;id()){\r\n            $fav = Fav_items::where(\"product_id\",$request-&gt;product_id)-&gt;where(\"table_name\",$request-&gt;table_name)-&gt;where(\"user_id\",auth()-&gt;id())-&gt;first();\r\n            if($fav){\r\n                \/\/delete it \r\n                $fav-&gt;delete();\r\n                return response()-&gt;json(['flag' =&gt; true, 'message' =&gt; \"removed\"],200);\r\n            }else{\r\n                \/\/insert it \r\n                $fav = new Fav_items;\r\n                $fav-&gt;product_id = $request-&gt;product_id;\r\n                $fav-&gt;table_name = $request-&gt;table_name;\r\n                $fav-&gt;user_id = auth()-&gt;id();\r\n                $fav-&gt;save();\r\n                return response()-&gt;json(['flag' =&gt; true, 'message' =&gt; \"added\"],200);\r\n            }            \r\n        }\r\n     \r\n    }\r\n\r\n    public function isFavoritedByCurrentUser($product_id,$table_name)\r\n    {\r\n        if(auth()-&gt;id() &amp;&amp; $product_id &amp;&amp; $table_name){\r\n            $is_fav = Fav_items::where(\"product_id\",$product_id);\r\n            $is_fav = $is_fav-&gt;where(\"table_name\",$table_name);\r\n            $is_fav = $is_fav-&gt;where(\"user_id\",auth()-&gt;id())-&gt;exists();\r\n            if($is_fav){\r\n                return 1;\r\n            }else{\r\n                return null;\r\n            }\r\n        }\r\n    }<\/code><\/pre>\r\n<p>&nbsp;<\/p>\r\n<p>5. Add logic to view controller to display filled or not JobsController.php<\/p>\r\n<pre class=\"language-markup\"><code>$jobs=$jobs-&gt;paginate(10)-&gt;withQueryString();\r\nforeach($jobs as $job){\r\n   $job-&gt;is_fav = \\App\\Http\\Controllers\\APIController::isFavoritedByCurrentUser($job-&gt;id,'data_jobs');\r\n}<\/code><\/pre>\r\n<p>6. add table to db<\/p>\r\n<pre class=\"language-markup\"><code>DROP TABLE IF EXISTS `fav_items`;\r\nCREATE TABLE `fav_items` (\r\n  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n  `user_id` varchar(255) NOT NULL,\r\n  `product_id` varchar(255) NOT NULL,\r\n  `table_name` varchar(255) NOT NULL,\r\n  `created_at` datetime NOT NULL,\r\n  `updated_at` datetime NOT NULL,\r\n  PRIMARY KEY (`id`)\r\n)<\/code><\/pre>","category_id":"2","is_private":"0","created_at":"2023-03-16T23:38:31.000000Z","updated_at":"2023-03-16T23:38:31.000000Z","category":{"id":2,"user_id":"1","name":"Laravel Core","slug":"laravel-nhyt","parent_id":"1","created_at":"2023-03-14T03:58:27.000000Z","updated_at":"2023-03-20T11:30:50.000000Z"},"user":{"id":1,"name":"R GONDAL","email":"rizikmw@gmail.com","email_verified_at":null,"two_factor_confirmed_at":null,"current_team_id":"1","profile_photo_path":null,"created_at":"2023-03-12T10:49:33.000000Z","updated_at":"2025-01-10T12:59:00.000000Z","profile_photo_url":"https:\/\/ui-avatars.com\/api\/?name=R+G&color=7F9CF5&background=EBF4FF"}},"pageDesc":" add to fav button in view ie jobs.blade.php  &lt;button type=\"button\" class=\"add_to_fav btn btn-block apply_btnis\" data-id=\"{{$job-&gt;id}} - Add to favorite item laravel tutorial (Updated: March 16, 2023) - Read more about Add to favorite item laravel tutorial at my programming site [SITE]","categories":[]}