paradox
3 سال پیش توسط paradox مطرح شد
25 پاسخ

ذخیره نشدن اطلاعات در دیتابیس

سلام دوستان من میخام سیستم دانلود فایل بعد از پرداخت پیاده سازی کنم

دیتابیس به شکل زیر طراحی کردم ایا غلطه ؟

  public function up()
    {
        Schema::create('files', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            $table->string('title');
            $table->text('description');
            $table->integer('price');
            $table->string('image');
            $table->string('file');
            $table->string('slug')->unique();
            $table->integer('hit');
            $table->tinyInteger('status');

            $table->integer('inventory')->default(0);
            $table->timestamps();

      });

        Schema::create('category_file' , function(Blueprint $table) {
            $table->unsignedBigInteger('category_id');
            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
            $table->unsignedBigInteger('file_id');
            $table->foreign('file_id')->references('id')->on('files')->onDelete('cascade');
            $table->primary(['category_id' , 'file_id']);
        });

    }

مدل فایل به شکل زیر


class File extends Model
{
    use Sluggable;

    protected $fillable = [
        'title' , 'slug', 'description' , 'status' ,'price' , 'inventory' , 'image' , 'file'
    ];
    protected $attributes = [
        'hit'=> 1,
    ];
        public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }

    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }

    public function user() {

        return $this->belongsTo(User::class);
    }

    public function sluggable()
    {
        return [
            'slug' => [
                'source' => ''
            ]
        ];
    }
}

کنترلر به شکل زیر

    public function store(Request $request , File $files)
    {
       $validData = $request->validate([
            'title' => 'required',
            'description' => 'required',
            'image' => 'required',
            'file' => 'required',
            'categories' => 'required',
            'slug' => 'unique:files',
            'status' => ''
        ]);

        if (empty($request->slug)) {
            $slug = SlugService::createSlug(File::class, 'slug', $request->title);
        } else {
            $slug = SlugService::createSlug(File::class, 'slug', $request->slug);
        }
        $request->merge(['slug' => $slug]);

        $files = Storage::disk('public')->putFileAs('files' , $request->file('file') , $request->file('file')->getClientOriginalName())->create($request->all());
        $files->categories()->sync($validData['categories']);

        alert()->success('مطلب مورد نظر با موفقیت ثبت شد' , 'با تشکر');

        return redirect(route('admin.files.index'));
    }

بلید هم به شکل زیر

@component('admin.layouts.content' , ['title' => 'ایجاد فایل'])
    @slot('breadcrumb')
        <li class="breadcrumb-item"><a href="/admin">پنل مدیریت</a></li>
        <li class="breadcrumb-item"><a href="{{ route('admin.files.index') }}">لیست فایل</a></li>
        <li class="breadcrumb-item active">ایجاد فایل</li>
    @endslot

    @slot('script')

        <script src="/js/ckeditor/ckeditor.js"></script>
        <script>

            CKEDITOR.replace('description', { filebrowserImageBrowseUrl: '/file-manager/ckeditor' });

            document.addEventListener("DOMContentLoaded", function() {

                document.getElementById('button-image').addEventListener('click', (event) => {
                    event.preventDefault();

                    inputId = 'image_label';
                    window.open('/file-manager/fm-button', 'fm', 'width=1400,height=800');
                });

                document.getElementById('button-file').addEventListener('click', (event) => {
                    event.preventDefault();

                    inputId = 'file_label';
                    window.open('/file-manager/fm-button', 'fm2', 'width=1400,height=800');
                });
            });

            // set file link
            let inputId = '';

            function fmSetLink($url) {
                document.getElementById(inputId).value = $url;
            }

            $('#categories').select2({
                'placeholder' : 'دسترسی مورد نظر را انتخاب کنید'
            })

        </script>
    @endslot

    <div class="row">
        <div class="col-lg-12">
            @include('admin.layouts.errors')
            <div class="card">
                <div class="card-header">
                    <h3 class="card-title">فرم ایجاد فایل</h3>
                </div>
                <!-- /.card-header -->
                <!-- form start -->

                <form class="form-horizontal" action="{{ route('admin.files.store') }}" method="POST" enctype="multipart/form-data">
                    @csrf

                    <div class="card-body">
                        <div class="form-group">
                            <label for="inputEmail3" class="col-sm-2 control-label">نام فایل</label>
                            <input type="text" name="title" class="form-control @error('title') is-invalid @enderror" id="inputEmail3" placeholder="نام فایل را وارد کنید" value="{{ old('title') }}">
                            @error('title')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label for="title" >نام مستعار :</label>
                            <div class="input-group">
                                <input type="text" class="form-control @error('slug') is-invalid @enderror" name="slug" value="{{old('slug')}}">
                            </div>
                            @error('slug')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>

                        <div class="form-group">
                            <label for="description" class="col-sm-2 control-label">توضیحات</label>
                            <textarea class="form-control" name="description" id="description" cols="30" rows="10" style="min-height: 300px">{{ old('description') }}</textarea>
                        </div>

                        <div class="form-group">
                            <label for="title" > وضعیت : </label>
                            <div class="input-group">
                                <select class="form-control" name="status" >
                                    <option value="0">منتشر نشده</option>
                                    <option value="1">منتشر شده</option>
                                </select>
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="inputPassword3" class="col-sm-2 control-label">قیمت</label>
                            <input type="number" name="price" class="form-control @error('price') is-invalid @enderror" id="inputPassword3" placeholder="قیمت را وارد کنید" value="{{ old('price') }}">
                            @error('price')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label for="inputPassword3" class="col-sm-2 control-label">موجودی</label>
                            <input type="number" name="inventory" class="form-control @error('inventory') is-invalid @enderror" id="inputPassword3" placeholder="موجودی را وارد کنید" value="{{ old('inventory') }}">
                            @error('inventory')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">آپلود تصویر شاخص</label>
                            <div class="input-group">
                                <input type="text" id="image_label" class="form-control" name="image">
                                <div class="input-group-append">
                                    <button class="btn btn-outline-secondary" type="button" id="button-image">انتخاب</button>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-2 control-label">آپلود فایل</label>
                            <div class="input-group">
                                <input type="text" id="file_label" class="form-control" name="file">
                                <div class="input-group-append">
                                    <button class="btn btn-outline-secondary" type="button" id="button-file">انتخاب</button>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="inputEmail3" class="col-sm-2 control-label">دسته بندی ها</label>
                            <select class="form-control" name="categories[]" id="categories" multiple>
                                @foreach(\Modules\Category\Entities\Category::all() as $category)
                                    <option value="{{ $category->id }}">{{ $category->name }}</option>
                                @endforeach
                            </select>
                        </div>

                    </div>
                    <!-- /.card-body -->
                    <div class="card-footer">
                        <button type="submit" class="btn btn-info">ثبت فایل</button>
                        <a href="{{ route('admin.files.index') }}" class="btn btn-default float-left">لغو</a>
                    </div>
                    <!-- /.card-footer -->
                </form>
            </div>
        </div>
    </div>

@endcomponent

لطفا راهنمایی کنید کدوم قسمت مشکل داره نمیتونم اطلاعات تو دیتابیس ذخیره کنم


ثبت پرسش جدید
سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

به این شکل بنویسید.

                <form class="form-horizontal" action="{{ route('admin.files.update' , 'files'/* اسم پرامتر شما که در روت مشخص کردید */ =>$files->id) }}" method="POST" enctype="multipart/form-data">

@wxyz4367


paradox
@wxyz4367 3 سال پیش آپدیت شد
0

@websaz

controller

    public function update(Request $request, File $files)
    {
        $validData = $request->validate([
            'title' => 'required',
            'description' => 'required',
            'price' => 'required',
            'inventory' => 'required',
            'image' => 'required',
            'file' => 'required',
            'categories' => 'required',
            'slug' => 'unique:file',
            'status' => ''
        ]);

        $files->update($validData);
        $files->categories()->sync($validData['categories']);

        alert()->success('فایل مورد نظر با موفقیت ویرایش شد' , 'با تشکر');
        return redirect(route('admin.files.index'));
    }

blade edit

@component('admin.layouts.content' , ['title' => 'ویرایش فایل'])
    @slot('breadcrumb')
        <li class="breadcrumb-item"><a href="/admin">پنل مدیریت</a></li>
        <li class="breadcrumb-item"><a href="{{ route('admin.users.index') }}">لیست فایل</a></li>
        <li class="breadcrumb-item active">ویرایش فایل</li>
    @endslot

    @slot('script')

        <script src="/js/ckeditor/ckeditor.js"></script>

        <script>
           CKEDITOR.replace('description', { filebrowserImageBrowseUrl: '/file-manager/ckeditor' });

            document.addEventListener("DOMContentLoaded", function() {

                document.getElementById('button-image').addEventListener('click', (event) => {
                    event.preventDefault();

                    inputId = 'image_label';
                    window.open('/file-manager/fm-button', 'fm', 'width=1400,height=800');
                });

                document.getElementById('button-file').addEventListener('click', (event) => {
                    event.preventDefault();

                    inputId = 'file_label';
                    window.open('/file-manager/fm-button', 'fm2', 'width=1400,height=800');
                });
            });

            // set file link
            let inputId = '';

            function fmSetLink($url) {
                document.getElementById(inputId).value = $url;
            }

            $('#categories').select2({
                'placeholder' : 'دسترسی مورد نظر را انتخاب کنید'
            })

        </script>
    @endslot

    <div class="row">
        <div class="col-lg-12">
            @include('admin.layouts.errors')
            <div class="card">
                <div class="card-header">
                    <h3 class="card-title">فرم ویرایش فایل</h3>
                </div>
                <!-- /.card-header -->
                <!-- form start -->

                <form class="form-horizontal" action="{{ route('admin.files.update' , ['files', 'FileController' => $files->id ]) }}" method="POST" enctype="multipart/form-data">

                    @csrf
                    @method('patch')

                    <div class="card-body">
                        <div class="form-group">
                            <label for="inputEmail3" class="col-sm-2 control-label">نام فایل</label>
                            <input type="text" name="title" class="form-control @error('inventory') is-invalid @enderror" id="inputEmail3" placeholder="نام فایل را وارد کنید" value="{{ old('title' , $files->title) }}">
                            @error('title')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label for="slug" >نام مستعار :</label>
                            <div class="input-group">
                                <input type="text" class="form-control @error('slug') is-invalid @enderror" name="slug" value="{{$files->slug}}" placeholder="نام فایل را به انگلیسی وارد کنید">
                            </div>
                            @error('slug')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label for="inputEmail3" class="col-sm-2 control-label">توضیحات</label>
                            <textarea class="form-control" name="description" id="description" cols="30" rows="10">{{ old('description',$files->description) }}</textarea>
                        </div>

                        <div class="form-group">
                            <label for="title" > وضعیت : </label>
                            <div class="input-group">
                                <select class="form-control" name="status" >
                                    <option value="1"
                                    @if ($files->status == 1)
                                        {{'selected'}}
                                        @endif
                                    >فعال
                                    </option>
                                    <option value="0"
                                    @if ($files->status == 0)
                                        {{'selected'}}
                                        @endif
                                    >غیرفعال
                                    </option>
                                </select>
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="inputPassword3" class="col-sm-2 control-label">قیمت</label>
                            <input type="number" name="price" class="form-control @error('inventory') is-invalid @enderror" id="inputPassword3" placeholder="قیمت را وارد کنید" value="{{ old('price',$files->price) }}">
                            @error('price')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label for="inputPassword3" class="col-sm-2 control-label">موجودی</label>
                            <input type="number" name="inventory" class="form-control @error('inventory') is-invalid @enderror" id="inputPassword3" placeholder="موجودی را وارد کنید" value="{{ old('inventory',$files->inventory) }}">
                            @error('inventory')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <hr>
                            <label class="col-sm-2 control-label">آپلود تصویر شاخص</label>
                            <div class="input-group mb-2">
                                <input type="text" id="image_label" class="form-control" name="image" dir="ltr" value="{{ $files->image }}">
                                <div class="input-group-append">
                                    <button class="btn btn-outline-secondary" type="button" id="button-image">انتخاب</button>
                                </div>
                            </div>
                            <img class="w-25" src="{{ $files->image }}" alt="">

                        </div>

                        <div class="form-group">
                            <hr>
                            <label class="col-sm-2 control-label">آپلود فایل </label>
                            <div class="input-group mb-2">
                                <input type="text" id="file_label" class="form-control" name="file" dir="ltr" value="{{ $files->file }}">
                                <div class="input-group-append">
                                    <button class="btn btn-outline-secondary" type="button" id="button-file">انتخاب</button>
                                </div>
                            </div>
                            <img class="w-25" src="{{ $files->image }}" alt="">

                        </div>

                        <div class="form-group">
                            <label for="inputEmail3" class="col-sm-2 control-label">دسته بندی ها</label>
                            <select class="form-control" name="categories[]" id="categories" multiple>
                                @foreach(\Modules\Category\Entities\Category::all() as $category)
                                    <option value="{{ $category->id }}" {{ in_array($category->id , $files->categories->pluck('id')->toArray()) ? 'selected' : '' }}>{{ $category->name }}</option>
                                @endforeach
                            </select>
                        </div>

                    </div>
                    <!-- /.card-body -->
                    <div class="card-footer">
                        <button type="submit" class="btn btn-info">ویرایش فایل</button>
                        <a href="{{ route('admin.files.index') }}" class="btn btn-default float-left">لغو</a>
                    </div>
                    <!-- /.card-footer -->
                </form>
            </div>
        </div>
    </div>

@endcomponent

دکمه حذف و ststus هم عمل نمیکنه
تو بخش دیگه کار میکنه ولی برای فایل کار نمیکنه

 public function destroy(File $files)
    {
        $files->delete();

        alert()->success('فایل مورد نظر با موفقیت حذف شد' , 'با تشکر');
        return back();
    }

    public function updatestatus(File $files)
    {
        if ($files->status == 1) {
            $files->status = 0;
        } else {
            $files->status = 1;
        }
        $files->save();

        alert()->success('به روز رسانی با موفقیت انجام شد' , 'با تشکر');

        return redirect(route('admin.files.index'));
    }

سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

سلام نحوه ارسال پارامتر به روت اشتباه است باید به این شکل باشد.

 route('admin.files.update' , ['files' => $files->id ])

@wxyz4367


paradox
@wxyz4367 3 سال پیش مطرح شد
0

@websaz
قبلا تست کردم ولی این ارور میده بازهم

Missing required parameters for [Route: admin.files.update] [URI: admin/files/{file}]. (View: C:\xampp\htdocs\laravelpro\Modules\File\Resources\views\admin\files\edit.blade.php)
http://localhost:8000/admin/files/5/edit

سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

شما اسم پامتر رو file گذاشتید پس باید به این شکل بنویسید.

 route('admin.files.update' , ['file' => $files->id ])

@wxyz4367


paradox
@wxyz4367 3 سال پیش مطرح شد
0

@websaz
هم file گذاشتم هم files اصلا هرچی میزارم همون ارور قبل نمایش میده 😔


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام