瀏覽代碼

end morph upload

Azam Rezayi 4 年之前
父節點
當前提交
41737dc9f9

+ 2 - 2
app/Models/Upload.php

@@ -9,8 +9,8 @@ use Packages\Product\Models\Product;
 class Upload extends Model
 {
     protected $fillable = ['name', 'path', 'mime_type', 'extension', 'uploadable_type', 'uploadable_id'];
-    public function uploadable()
+    public function products()
     {
-        return $this->morphTo();
+        return $this->morphTo('Packages\Product\Models\Product', 'uploadables');
     }
 }

+ 3 - 0
config/app.php

@@ -161,6 +161,7 @@ return [
         Illuminate\Translation\TranslationServiceProvider::class,
         Illuminate\Validation\ValidationServiceProvider::class,
         Illuminate\View\ViewServiceProvider::class,
+//        Morilog\Jalali\JalaliServiceProvider::class,
 
 
 
@@ -230,6 +231,8 @@ return [
         'URL' => Illuminate\Support\Facades\URL::class,
         'Validator' => Illuminate\Support\Facades\Validator::class,
         'View' => Illuminate\Support\Facades\View::class,
+//        'jDate' => Morilog\Jalali\Facades\jDate::class,
+//        'jDateTime' => Morilog\Jalali\Facades\jDateTime::class,
 
 
     ],

+ 34 - 0
database/migrations/2020_07_05_100449_create_uploadables_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateUploadablesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('uploadables', function (Blueprint $table) {
+            $table->id();
+            $table->integer('upload_id');
+            $table->integer('uploadables_id');
+            $table->string('uploadables_type');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('uploadables');
+    }
+}

+ 57 - 21
packages/product/src/Http/Controllers/ProductController.php

@@ -19,6 +19,7 @@ class ProductController extends Controller
     {
 
     }
+
 //  *******************************************show  page product ************
     public function index()
     {
@@ -27,7 +28,7 @@ class ProductController extends Controller
         $products = Product::query()->orderBy('id', 'DESC');
 
         if (request()->has('productCategory') && request('productCategory') != '')
-            $products = $products->whereHas('categories', function (Builder $query){
+            $products = $products->whereHas('categories', function (Builder $query) {
                 $query->whereRaw('id = ?', [request('productCategory')]);
             });
 
@@ -57,7 +58,7 @@ class ProductController extends Controller
 
 // *********************************************************save products ******************
 
-    public function store(ProductRequest $request )
+    public function store(ProductRequest $request)
     {
 
         $request->merge([
@@ -79,50 +80,61 @@ class ProductController extends Controller
         ];
 
         $product = Product::create($data);
-        $afterDiskRoot = '/' . jdate()->format('Y') . '/' . jdate('m');
-        $diskName = 'product';
+
+        $file = $request->file('photo');
+//       $afterDiskRoot = '/' . jdate()->format('Y') . '/' . jdate('m');
+
         $fileMime = $file->getClientMimeType();
         $fileExtension = $file->getClientOriginalExtension();
-        $fileName = 'product-file-' . '_' . $file->getClientOriginalName();
-        $filePath = storage_path('app/product/' . $diskName . $afterDiskRoot . '/' . $fileName);
-        if (File::exists($filePath)) {
+        $fileName =  'product_file'. time() . '_'  . $file->getClientOriginalName();
+//    /    $filePath = $file->storeAs('photos' . .$afterDiskRoot ,$fileName,'product');
+
+      $filePath = $file->storeAs('photos',  $fileName , 'product');
+
+        if (file_exists($filePath)) {
+
+           $fileName = 'product_file'. time() . '_' . $fileName;
 
-            $fileName = time() . '_' . $fileName;
         }
         $dataUpload = [
-         'name' => $fileName,
-         'extension' => $fileExtension,
-         'path' => $filePath,
-         'mime_type' => $fileMime,
+            'name' => $fileName,
+            'extension' => $fileExtension,
+            'path' => $filePath,
+            'mime_type' => $fileMime,
+            'uploadable_type' => 'Packages\Product\Models\Product',
+            'uploadable_id' => $product->id,
 
         ];
-        $product->upload->create($dataUpload);
+
 
         $product->categories()->sync($request->categories);
-        $product->upload()->sync($request->upload);
-        dd($request->all());
+        $product->uploads()->create($dataUpload);
+
+
         $msg = 'ذخیره محصول با موفقیت انجام شد ';
-        return redirect(route('products.edit', $product->id), compact('upload'))->with('success', $msg);
+        return redirect(route('products.edit', $product->id))->with('success', $msg);
     }
 
     // ******************************************************edit page product*********************************************
 
     public function edit(Product $product)
     {
+
         $categories = Category::orderBy('id', 'DESC')->get();
         return view('product::product.edit', compact('product', 'categories'));
     }
 
 // *******************************************update page product*****************************************
 
-    public function update(ProductRequest $request, Product $product)
+    public function update(ProductRequest $request, Product $product, Upload $upload)
     {
+
         $request->merge([
             'price' => preg_replace('/[^0-9]+/', '', $request->price),
             'sale_price' => preg_replace('/[^0-9]+/', '', $request->sale_price),
         ]);
 
-//        $data = array_merge($request->all(), ['creator_id' => auth()->user()->id]);
+
         $data = [
             'title' => $request->title,
             'slug' => $request->slug,
@@ -136,11 +148,34 @@ class ProductController extends Controller
         ];
 
         $product->update($data);
-        $product->categories()->sync($request->categories);
 
-        $msg = 'ویرایش محصول با موفقیت انجام شد ';
 
-        return redirect(route('products.index'))->with('success', $msg);
+        $file = $request->file('photo');
+        $afterDiskRoot = '/' . jdate()->format('Y') . '/' . jdate('m');
+        $diskName = 'product';
+        $fileMime = $file->getClientMimeType();
+        $fileExtension = $file->getClientOriginalExtension();
+        $fileName = 'product-file-' . '_' . $file->getClientOriginalName();
+        $filePath = $file->storeAs('photos', $fileName, 'product');
+        if (file_exists($filePath)) {
+
+            $fileName = time() . '_' . $fileName;
+
+        }
+        $dataUpload = [
+            'name' => $fileName,
+            'extension' => $fileExtension,
+            'path' => $filePath,
+            'mime_type' => $fileMime,
+            'uploadable_type' => 'Packages\Product\Models\Product',
+            'uploadable_id' => $product->id,
+
+        ];
+        $product->categories()->sync($request->categories);
+        $product->uploads()->update($dataUpload);
+        $msg = 'ویرایش محصول با موفقیت انجام شد ';
+        dd($request->all());
+        return redirect(route('products.index'),compact('upload'))->with('success', $msg);
     }
 
     //***************************** delete products*****************************************
@@ -155,4 +190,5 @@ class ProductController extends Controller
     }
 
 
+
 }

+ 1 - 1
packages/product/src/Http/Requests/ProductRequest.php

@@ -31,7 +31,7 @@ class ProductRequest extends FormRequest
             'status' => ['required'],
             'discription' => ['required'],
             'categories' => ['required'],
-            'photo' => ['required','file','image','mimes:jpeg,npg,gif,webp,jfif','max:2048'],
+            'photo' => ['required','file','image','mimes:jpeg,jpg,npg,gif,webp,jfif','max:2048'],
 
         ];
 

+ 2 - 2
packages/product/src/Models/Product.php

@@ -25,9 +25,9 @@ class Product extends Model
     {
         return $this->morphToMany(Category::class, 'categorizable');
     }
-    public function upload()
+    public function uploads()
     {
-        return $this->morphToMany(Upload::class, 'uploadable');
+        return $this->morphToMany('App\Models\Upload', 'uploadables');
     }
     public function getTypeAttribute($value)
     {

+ 21 - 1
packages/product/src/views/product/edit.blade.php

@@ -14,7 +14,9 @@
             }
 
             .py-5 {
-                padding-top: 0 !important;
+                padding-top: 0 !important;}
+            .photo{
+                border: 0px ;background-color: #fff;
             }
         </style>
     @endslot
@@ -174,6 +176,24 @@
                                         </span>
                                         @enderror
                                     </div>
+                                    <div class="form-group photo">
+
+                                        <label for="title">{{ __('product.photo') }}</label><i
+                                            class="required">&nbsp; *</i>
+                                        @foreach($product->uploads as $upload_photo)
+
+                                          <span>{{basename($upload_photo->path)}}</span>
+                                        <input type="file" name="photo" id="photo"
+
+                                               class="form-control photo @error('photo') is-invalid  @enderror"
+                                               value="{{basename($upload_photo->name)}}" autocomplete="photo" autofocus >
+                                        @error('photo')
+                                        <span class="invalid-feedback" role="alert">
+                                            <strong>{{ $message }}</strong>
+                                        </span>
+                                        @enderror
+                                        @endforeach
+                                    </div>
                                     <div class="form-group mb-0">
                                         <div class="">
                                             <button type="submit" class="btn btn-primary">