Kaynağa Gözat

maf orders view, multiple filters

Alexander Musikhin 1 ay önce
ebeveyn
işleme
8a4f25eb28

+ 26 - 19
app/Http/Controllers/Controller.php

@@ -129,27 +129,34 @@ class Controller extends BaseController
             foreach ($request->filters as $filterName => $filterValue) {
                 if(!$filterValue) continue;
 
-                if(Str::contains($filterName, 'price')) {
-                    $filterValue = $filterValue * 100;
-                }
-
-                if(Str::endsWith($filterName, '_from')) {
-                    if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
-                        $filterValue .= ' 00:00:00';
-                    }
-                    $query->where(Str::replace('_from', '', $filterName), '>=', $filterValue);
-                } elseif(Str::endsWith($filterName, '_to')) {
-                    if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
-                        $filterValue .= ' 23:59:59';
-                    }
-                    $query->where(Str::replace('_to', '', $filterName), '<=', $filterValue);
+                if(Str::contains($filterName, '||')) {
+                    $values = explode('||', $filterValue);
+                    $query->whereIn($filterName, $values);
                 } else {
-                    if($filterValue == '-пусто-') {
-                        $query->whereNull($filterName);
-                    } else {
-                        $query->where($filterName, '=', $filterValue);
-                    }
+                    $query->where($filterName, $filterValue);
                 }
+
+//                if(Str::contains($filterName, 'price')) {
+//                    $filterValue = $filterValue * 100;
+//                }
+//
+//                if(Str::endsWith($filterName, '_from')) {
+//                    if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
+//                        $filterValue .= ' 00:00:00';
+//                    }
+//                    $query->where(Str::replace('_from', '', $filterName), '>=', $filterValue);
+//                } elseif(Str::endsWith($filterName, '_to')) {
+//                    if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
+//                        $filterValue .= ' 23:59:59';
+//                    }
+//                    $query->where(Str::replace('_to', '', $filterName), '<=', $filterValue);
+//                } else {
+//                    if($filterValue == '-пусто-') {
+//                        $query->whereNull($filterName);
+//                    } else {
+//                        $query->where($filterName, '=', $filterValue);
+//                    }
+//                }
             }
         }
     }

+ 32 - 0
app/Models/MafOrdersView.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Models;
+
+use App\Models\Scopes\YearScope;
+use Illuminate\Database\Eloquent\Attributes\ScopedBy;
+use Illuminate\Database\Eloquent\Model;
+
+#[ScopedBy([YearScope::class])]
+class MafOrdersView extends Model
+{
+    const DEFAULT_SORT_BY = 'created_at';
+
+    protected $table = 'maf_orders_view';
+
+    protected $fillable = [
+        'id',
+        'year',
+        'order_number',
+        'status',
+        'user_id',
+        'product_id',
+        'quantity',
+        'in_stock',
+        'user_name',
+        'article',
+        'nomenclature_number',
+        'name_tz',
+        'type',
+        'manufacturer_name',
+    ];
+}

+ 36 - 0
database/migrations/2025_10_09_110622_create_maf_orders_view_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        $sql = "CREATE OR REPLACE VIEW maf_orders_view AS
+       	
+                SELECT mo.*,
+                    u.name as user_name,
+                    p.article,
+                    p.nomenclature_number,
+                    p.name_tz,
+                    p.type_tz,
+                    p.`type`,
+                    p.manufacturer_name
+                FROM maf_orders mo 
+                    LEFT JOIN users u ON mo.user_id = u.id
+                    LEFT JOIN products p ON p.id = mo.product_id";
+        DB::unprepared($sql);
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        DB::unprepared('DROP VIEW IF EXISTS maf_orders_view');    }
+};