diff --git a/app/Models/Car.php b/app/Models/Car.php index 193f395..7d662ec 100644 --- a/app/Models/Car.php +++ b/app/Models/Car.php @@ -130,17 +130,20 @@ class Car extends Model public function scopeFilter($query, array $filters) { $query->when($filters['search'] ?? null, function ($query, $search) { - $query->where(function ($query) use ($search) { - $query->orWhere('colour', 'like', $search . '%') - ->orWhere('stammnummer', 'like', $search . '%') - ->orWhere('vin', 'like', $search . '%') - ->orWhereHas('carModel', function ($query) use ($search) { - $query->where('name', 'like', $search.'%') - ->orWhereHas('brand', function ($query) use ($search) { - $query->where('name', 'like', $search.'%'); + $parts = explode(' ', $search); + foreach ($parts as $part) { + $query->where(function ($query) use ($part) { + $query->orWhere('colour', 'like', $part . '%') + ->orWhere('stammnummer', 'like', $part . '%') + ->orWhere('vin', 'like', $part . '%') + ->orWhereHas('carModel', function ($query) use ($part) { + $query->where('name', 'like', $part.'%') + ->orWhereHas('brand', function ($query) use ($part) { + $query->where('name', 'like', $part.'%'); + }); }); - }); - }); + }); + } })->when($filters['trashed'] ?? null, function ($query, $trashed) { if ($trashed === 'with') { $query->withTrashed(); diff --git a/app/Models/Contact.php b/app/Models/Contact.php index be4cfd6..4808b68 100644 --- a/app/Models/Contact.php +++ b/app/Models/Contact.php @@ -81,16 +81,20 @@ class Contact extends Model public function scopeFilter($query, array $filters) { $query->when($filters['search'] ?? null, function ($query, $search) { - $query->where(function ($query) use ($search) { - $query->where('firstname', 'like', '%' . $search . '%') - ->orWhere('lastname', 'like', '%' . $search . '%') - ->orWhere('company', 'like', '%' . $search . '%') - ->orWhere('email', 'like', '%' . $search . '%') - ->orWhere('zip', 'like', $search . '%') - ->orWhere('city', 'like', '%' . $search . '%') - ->orWhere('address', 'like', '%' . $search . '%') - ->orWhere('phone', 'like', '%' . $search . '%'); - }); + $parts = explode(' ', $search); + foreach ($parts as $part) { + $query->where(function ($query) use ($part) { + $query->where('firstname', 'like', '%' . $part . '%') + ->orWhere('lastname', 'like', '%' . $part . '%') + ->orWhere('company', 'like', '%' . $part . '%') + ->orWhere('email', 'like', '%' . $part . '%') + ->orWhere('zip', 'like', $part . '%') + ->orWhere('city', 'like', '%' . $part . '%') + ->orWhere('address', 'like', '%' . $part . '%') + ->orWhere('phone', 'like', '%' . $part . '%'); + }); + } + })->when($filters['trashed'] ?? null, function ($query, $trashed) { if ($trashed === 'with') { $query->withTrashed(); diff --git a/public/js/app.js b/public/js/app.js index 90fe81c..66900e8 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -28098,9 +28098,58 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /*!***************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Cars/Index.vue?vue&type=template&id=5cf1bb2b ***! \***************************************************************************************************************************************************************************************************************************************************************************/ -/***/ (() => { +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -throw new Error("Module build failed (from ./node_modules/babel-loader/lib/index.js):\nSyntaxError: /var/www/html/resources/js/Pages/Cars/Index.vue: Unexpected token, expected \",\" (26:14)\n\n\u001b[0m \u001b[90m 24 |\u001b[39m _createVNode(_component_simple_table\u001b[33m,\u001b[39m {\u001b[0m\n\u001b[0m \u001b[90m 25 |\u001b[39m title\u001b[33m:\u001b[39m cars\u001b[33m.\u001b[39mtotal \u001b[33m+\u001b[39m \u001b[32m' '\u001b[39m \u001b[33m+\u001b[39m (cars\u001b[33m.\u001b[39mtotal \u001b[33m===\u001b[39m \u001b[32m'1'\u001b[39m \u001b[33m?\u001b[39m \u001b[32m'Auto'\u001b[39m \u001b[33m:\u001b[39m \u001b[32m'Autos'\u001b[39m\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m data\u001b[33m:\u001b[39m $props\u001b[33m.\u001b[39mcars\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 27 |\u001b[39m columns\u001b[33m:\u001b[39m $data\u001b[33m.\u001b[39mcolumns\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 28 |\u001b[39m defaultSort\u001b[33m:\u001b[39m $props\u001b[33m.\u001b[39msort\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 29 |\u001b[39m filters\u001b[33m:\u001b[39m $props\u001b[33m.\u001b[39mfilters\u001b[33m,\u001b[39m\u001b[0m\n at Parser._raise (/var/www/html/node_modules/@babel/parser/lib/index.js:816:17)\n at Parser.raiseWithData (/var/www/html/node_modules/@babel/parser/lib/index.js:809:17)\n at Parser.raise (/var/www/html/node_modules/@babel/parser/lib/index.js:770:17)\n at Parser.unexpected (/var/www/html/node_modules/@babel/parser/lib/index.js:9896:16)\n at Parser.expect (/var/www/html/node_modules/@babel/parser/lib/index.js:9870:28)\n at Parser.parseParenAndDistinguishExpression (/var/www/html/node_modules/@babel/parser/lib/index.js:11504:14)\n at Parser.parseExprAtom (/var/www/html/node_modules/@babel/parser/lib/index.js:11191:23)\n at Parser.parseExprSubscripts (/var/www/html/node_modules/@babel/parser/lib/index.js:10869:23)\n at Parser.parseUpdate (/var/www/html/node_modules/@babel/parser/lib/index.js:10849:21)\n at Parser.parseMaybeUnary (/var/www/html/node_modules/@babel/parser/lib/index.js:10827:23)"); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "render": () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +var _hoisted_1 = { + "class": "font-semibold text-xl text-gray-800 leading-tight" +}; + +var _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Alle Autos "); + +var _hoisted_3 = { + "class": "w-full mx-auto" +}; +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_bread_crumb = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("bread-crumb"); + + var _component_simple_table = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("simple-table"); + + var _component_layout = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("layout"); + + return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_layout, null, { + header: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () { + return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("h2", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_bread_crumb, { + text: "Autos", + href: _ctx.route('cars') + }, null, 8 + /* PROPS */ + , ["href"]), _hoisted_2])]; + }), + "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () { + return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_simple_table, { + title: $props.cars.total + ' ' + ($props.cars.total === 1 ? 'Auto' : 'Autos'), + data: $props.cars, + columns: $data.columns, + defaultSort: $props.sort, + filters: $props.filters, + currentRoute: $data.currentRoute, + print: true + }, null, 8 + /* PROPS */ + , ["title", "data", "columns", "defaultSort", "filters", "currentRoute"])])]; + }), + _: 1 + /* STABLE */ + + }); +} /***/ }), @@ -28287,9 +28336,58 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { /*!**************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Cars/Sold.vue?vue&type=template&id=0d5a2eea ***! \**************************************************************************************************************************************************************************************************************************************************************************/ -/***/ (() => { +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -throw new Error("Module build failed (from ./node_modules/babel-loader/lib/index.js):\nSyntaxError: /var/www/html/resources/js/Pages/Cars/Sold.vue: Unexpected token, expected \",\" (26:14)\n\n\u001b[0m \u001b[90m 24 |\u001b[39m _createVNode(_component_simple_table\u001b[33m,\u001b[39m {\u001b[0m\n\u001b[0m \u001b[90m 25 |\u001b[39m title\u001b[33m:\u001b[39m cars\u001b[33m.\u001b[39mtotal \u001b[33m+\u001b[39m \u001b[32m' '\u001b[39m \u001b[33m+\u001b[39m (cars\u001b[33m.\u001b[39mtotal \u001b[33m===\u001b[39m \u001b[32m'1'\u001b[39m \u001b[33m?\u001b[39m \u001b[32m'Auto'\u001b[39m \u001b[33m:\u001b[39m \u001b[32m'Autos'\u001b[39m\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 26 |\u001b[39m data\u001b[33m:\u001b[39m $props\u001b[33m.\u001b[39mcars\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 27 |\u001b[39m columns\u001b[33m:\u001b[39m $data\u001b[33m.\u001b[39mcolumns\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 28 |\u001b[39m defaultSort\u001b[33m:\u001b[39m $props\u001b[33m.\u001b[39msort\u001b[33m,\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 29 |\u001b[39m filters\u001b[33m:\u001b[39m $props\u001b[33m.\u001b[39mfilters\u001b[33m,\u001b[39m\u001b[0m\n at Parser._raise (/var/www/html/node_modules/@babel/parser/lib/index.js:816:17)\n at Parser.raiseWithData (/var/www/html/node_modules/@babel/parser/lib/index.js:809:17)\n at Parser.raise (/var/www/html/node_modules/@babel/parser/lib/index.js:770:17)\n at Parser.unexpected (/var/www/html/node_modules/@babel/parser/lib/index.js:9896:16)\n at Parser.expect (/var/www/html/node_modules/@babel/parser/lib/index.js:9870:28)\n at Parser.parseParenAndDistinguishExpression (/var/www/html/node_modules/@babel/parser/lib/index.js:11504:14)\n at Parser.parseExprAtom (/var/www/html/node_modules/@babel/parser/lib/index.js:11191:23)\n at Parser.parseExprSubscripts (/var/www/html/node_modules/@babel/parser/lib/index.js:10869:23)\n at Parser.parseUpdate (/var/www/html/node_modules/@babel/parser/lib/index.js:10849:21)\n at Parser.parseMaybeUnary (/var/www/html/node_modules/@babel/parser/lib/index.js:10827:23)"); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "render": () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); + +var _hoisted_1 = { + "class": "font-semibold text-xl text-gray-800 leading-tight" +}; + +var _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Verkaufte Autos "); + +var _hoisted_3 = { + "class": "w-full mx-auto" +}; +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_bread_crumb = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("bread-crumb"); + + var _component_simple_table = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("simple-table"); + + var _component_layout = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("layout"); + + return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_layout, null, { + header: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () { + return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("h2", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_bread_crumb, { + text: "Autos", + href: _ctx.route('cars') + }, null, 8 + /* PROPS */ + , ["href"]), _hoisted_2])]; + }), + "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () { + return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_simple_table, { + title: $props.cars.total + ' ' + ($props.cars.total === 1 ? 'Auto' : 'Autos'), + data: $props.cars, + columns: $data.columns, + defaultSort: $props.sort, + filters: $props.filters, + currentRoute: $data.currentRoute, + print: true + }, null, 8 + /* PROPS */ + , ["title", "data", "columns", "defaultSort", "filters", "currentRoute"])])]; + }), + _: 1 + /* STABLE */ + + }); +} /***/ }), @@ -67255,6 +67353,9 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_5cf1bb2b__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ }); /* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_5cf1bb2b__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Index.vue?vue&type=template&id=5cf1bb2b */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Cars/Index.vue?vue&type=template&id=5cf1bb2b"); @@ -67284,6 +67385,9 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Sold_vue_vue_type_template_id_0d5a2eea__WEBPACK_IMPORTED_MODULE_0__.render) +/* harmony export */ }); /* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Sold_vue_vue_type_template_id_0d5a2eea__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Sold.vue?vue&type=template&id=0d5a2eea */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Cars/Sold.vue?vue&type=template&id=0d5a2eea"); diff --git a/resources/js/Pages/Cars/Index.vue b/resources/js/Pages/Cars/Index.vue index 4320474..95cf282 100644 --- a/resources/js/Pages/Cars/Index.vue +++ b/resources/js/Pages/Cars/Index.vue @@ -7,7 +7,7 @@