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

رابطه یک به چند با جدول میانی

سلام دوستان
من یک سناریویی دارم اما برام گنگ شده نیاز به راهنمایی در روابطش داشتم. فرض کنید من یک جدول مقاله دارم و یک جدول دسته بندی که با استفاده از جدول pivot با هم در ارتباط هستند. حالا هر مقاله میتونه فقط یک دسته بندی داشته باشه و هر دسته بندی هم میتونه متعلق به مقاله ها باشه و این ارتباط از طریق جدول میانی article_id و category_id رو شامل میشه. حالا ممکنه بگید چرا جدول میانی نیاز بود؟ کاملا درسته من میتونستم با قراردادن یک فیلد category_id در جدول مقالات مشکل رو حل کنم اما در اینده ممکنه هر مقاله شامل چند دسته بندی بشه و در واقع چند به چند بشه .حالا به یک اروری خوردم نمیدونم مشکل سمت فرانتش هست یا مربوط به روابطش ممنون میشم راهنمایی کنید...
article model:

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

category model:

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

edit.blade.php:

<label for="category_id" class="form-control-label required">دسته بندی :</label>
<select class="form-control  @error('category_id') is-invalid @enderror" data-toggle="select" data-live-search="true" name="category_id" id="category_id">
  @foreach(\App\Models\Category::latest()->get() as $cate)
      <option value="{{ $cate->id }}" {{ in_array($cate->id , $article->categories->pluck('id')->toArray()) ? 'selected' : '' }}>{{ $cate->name }}</option>
  @endforeach
</select>

ERROR:

Symfony\Component\ErrorHandler\Error\FatalError
Type of Illuminate\Database\Eloquent\Relations\Pivot::$guarded must be array (as in class Illuminate\Database\Eloquent\Model)

ثبت پرسش جدید
فرید وطنی
تخصص : Software Developer
@faridvatani 3 سال پیش مطرح شد
1

سلام
قبلا در php امکان تعیین نوع متغییر ها وجود نداشت،اما در نسخه جدید قابلیت Type hints به این زبان افزوده شد و در این نسخه (7.4) این امکان افزوده شده که شما بتونید نوع متغییر های خود را هم تعریف کنید. شما میتونید انواع مختلف bool, int, float, string, array, object, iterable, self, parent یا نوع کلاس، را استفاده نمایید و چون این ورژن لاراول تون هنوز ساپورت نمیکنه بهتون خطا میده اگر بدین صورت بنویسید مشکل تون حل خواهد شد ولی اصولی و استاندارد نیست که کدهای لاراول تون رو دست بزنید.

protected array $guarded = [];

موفق باشید


فرید وطنی
تخصص : Software Developer
@faridvatani 3 سال پیش مطرح شد
0

سلام رضا جان
روابطی که بکار بردی نباید مشکلی داشته باشه اما متن این ارور این رو میگه که متغییر $guarded در فایل pivot لاراول باید ارایه باشه که نیست!!
کدیی که در فایل pivot لاراول هست رو ضمیمه کن و اینکه از چه ورژن لاراول و پی اچ پی استفاده می کنی؟
پیروز باشید


رضا
تخصص : Laravel Developer
@Megairan 3 سال پیش مطرح شد
0

سلام @faridvatani
از لاراول 7 و پی اچ پی 7.4 استفاده میکنم نفهمیدم چرا خطا میده در صورتی که ارایه هم هست!!

<?php

namespace Illuminate\Database\Eloquent\Relations;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Concerns\AsPivot;

class Pivot extends Model
{
    use AsPivot;

    /**
     * Indicates if the IDs are auto-incrementing.
     *
     * @var bool
     */
    public $incrementing = false;

    /**
     * The attributes that aren't mass assignable.
     *
     * @var array
     */
    protected $guarded = [];
}

فرید وطنی
تخصص : Software Developer
@faridvatani 3 سال پیش مطرح شد
1

سلام
قبلا در php امکان تعیین نوع متغییر ها وجود نداشت،اما در نسخه جدید قابلیت Type hints به این زبان افزوده شد و در این نسخه (7.4) این امکان افزوده شده که شما بتونید نوع متغییر های خود را هم تعریف کنید. شما میتونید انواع مختلف bool, int, float, string, array, object, iterable, self, parent یا نوع کلاس، را استفاده نمایید و چون این ورژن لاراول تون هنوز ساپورت نمیکنه بهتون خطا میده اگر بدین صورت بنویسید مشکل تون حل خواهد شد ولی اصولی و استاندارد نیست که کدهای لاراول تون رو دست بزنید.

protected array $guarded = [];

موفق باشید


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

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