رفتن به مطلب
انجمن پشتیبانی لاراول ایران

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

ali3adeghi

خطا در استفاده از روابط چند به چند و pivot

Recommended Posts

با سلام 

بنده تازه لاراول شروع کردم و طبق آموزشی که در انجمن هست دارم پیش میرم ولی در جلسه 26 هنگامی که میخوام مطلبی جدیدی ایجاد کنم به مشکل برمیخورم و خطای "Array to string conversion" میاد برام.

ممنون میشم راهنمایی کنید

مدل Article من :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'slug',
        'description',
        'status',
        'categories',
    ];
    protected $attributes =[
        'hits' => 10
    ];

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

مدل category من :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use HasFactory;
    
    protected $fillable = [
        'name',
        'slug',
       
    ];

    public function articles ()
    {
        return $this->belongsToMany (Article::class);
    }
}

متد create

    public function create()
    {
        $categories = Category::all()->pluck('name' , 'id');
        return view('back.articles.create' , compact ('categories'));
    }

متد store


        } catch (Exception $exception) {
            switch ($exception->getCode()) {
                case 23000:
                    $msg = "نام مستعار وارد شده از قبل وجود دارد";
                    break;
                
            }
            return redirect(route('admin.article'))->with('warning' , $msg);
        }
        $msg = "دسته بندی جدید با موفقیت ایجاد شد";
        return redirect(route('admin.articles'))->with('success', $msg);
         
    }

این هم فرم ایجاد مطلب جدید

 </div>
              <div class="form-group">
                <input type="text" class="form-control @error ('name') is-invalid @enderror" name="name"
                  placeholder="نام مطلب" value="{{ old('name') }}">
                @error('name')
                <div class="alert alert-danger" style="text-align: center">{{ $message }}</div>
                @enderror
              </div>

              <div class="form-group">
                <input type="text" class="form-control @error ('slug') is-invalid @enderror" name="slug"
                  placeholder="نام مستعار (slug)" value="{{ old('slug') }}">
                @error('slug')
                <div class="alert alert-danger" style="text-align: center">{{ $message }}</div>
                @enderror
              </div>

              <div class="form-group">
                <textarea type="text" class="form-control @error ('description') is-invalid @enderror"
                  name="description" placeholder="متن مطلب">{{ old('description') }}</textarea>
                @error('description')
                <div class="alert alert-danger" style="text-align: center">{{ $message }}</div>
                @enderror
              </div>

              <div class="form-group">
                <select class="form-group" name="status">
                  <option value="0">منتشر نشده</option>
                  <option value="1">منتشر شده</option>
                </select>
              </div>

              <div class="form-group">
                <label for="title">نویسنده: {{ Auth::user()->name }} </label>
                <input type="hidden" name="user_id" value="Auth::user()->id">
              </div>


              <div class="form-group">
                <label for="title">انتخاب دسته بندی</label>
                <div id="output"></div>
                <select data-placeholder="یک دسته بندی را انتخاب کنید" class="chosen-select" multiple name="categories[]" style="width: 400px">
                  @foreach ($categories as $cat_id => $cat_name)
                  <option value="{{ $cat_id }}">{{ $cat_name }}</option>

                  @endforeach


                </select>

              </div>
          </div>

          <div class="form-group">
            <button type="submit" class="btn btn-block create-account">ایجاد</button>
          </div>

          
          </form>

ممنون از وقتی که میزارید

Share this post


Link to post
Share on other sites

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

متد store ناقص ارسال شده به این شکل است

        $validatedData = $request->validate([
            'name'=>'required',
            'slug'=>'required|unique:categories',
        ], $messages=[
            'name.required' => 'نام نمیتواند خالی باشد',
            'slug.unique' => 'نام مستعار از قبل وجود دارد',
            'slug.required' => 'نام مستعار نمیتواند خالی باشد',
        ]);
       
    $article = new Article();
        try {
            $article = $article->create($request->all());
            $article->categories()->attach($request->categories);

        } catch (Exception $exception) {
            switch ($exception->getCode()) {
                case 23000:
                    $msg = "نام مستعار وارد شده از قبل وجود دارد";
                    break;
                
            }
            return redirect(route('admin.article'))->with('warning' , $msg);
        }
        $msg = "دسته بندی جدید با موفقیت ایجاد شد";
        return redirect(route('admin.articles'))->with('success', $msg);
         

 

Share this post


Link to post
Share on other sites

احتمالا بخاطر این هست که شما کل اطلاعات مطلب رو با request->all ذخیره میکنید در حالی که مجموعه های شما به شکل آرایه ارسال میشن و مجموعه ها بعد از ایجاد مطلب باید ذخیره بشه

باید برای دریافت اطلاعات و ذخیره مقاله از متد expect استفاده کنید و بدون مجموعه مابقی اطلاعات رو دریافت و مطلب رو ایجاد کنید سپس مجموعه ها رو اتچ کنید

Share this post


Link to post
Share on other sites

وارد این گفتگو شوید

میتوانید پیام خود را ارسال کنید و بعد ثبت نام نمایید. در صورتی که حساب کاربری دارید, هم اکنون وارد شوید و در این گفتگو شرکت کنید.

مهمان
پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  Only 75 emoji are allowed.

×   لینک شما به صورت اتوماتیک جایگذاری شد.   نمایش به عنوان یک لینک به جای

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • جدید...