جواد کرمی
4 سال پیش توسط جواد کرمی مطرح شد
3 پاسخ

پیاده سازی رابطه چند به چند با ستون اضافه

سلام دوستان. من دوتا جدول توی دیتابیسم دارم که میخوام بین این دو جدول رابطه چند به چند ایجاد کنم. یک جدول میانی هم ایجاد کردم. اما مشکل من اینه که میخوام علاوه بر آیدی دوتا جدولی که میخوام با هم رابطه داشته باشن، میخوام یک ستون دیگه هم به این جدول میانی اضافه کنم.
مثلا مایگریشن زیر رو فرض کنید:

Schema::create('role_user', function (Blueprint $table) {
    $table->Integer('role_id')->unsigned();
    $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');

    $table->Integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

    $table->boolian('status')->default(0);

    $table->primary(['role_id' , 'user_id']);
});

آیا روش تعریف مایگریشن به این صورت درسته؟ یا برای ستون سوم باید کار دیگه ای انجام بدم؟
و اینکه برای اینکه توی این جدول میانی اطلاعاتی رو ثبت کنم به چه صورت باید تک تک فیلد هارو مقدار بدم؟

$user->roles()->attach($role_id , array('status' => $status));

من به این روش سعی میکنم اطلاعات رو وارد جدول کنم اما با ارور مواجه میشم.


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

اون ارور به خاطر withTimestamps هست.. میتونی حذفش کنی
اما اگر بخواهی فیلد اضافه در pivot داشته باشی باید تعریفش کنی:


    return $this->belongsToMany('App\Model')
        ->withPivot('status');

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

مایگریشن مشکل خاصی نداره.
اطلاعات رو هم درست داری ذخیره میکنی

رابطه بین مدل ها رو به چه شکل پیاده سازی کردی؟

اگر بخواهی فیلد اضافه در pivot داشته باشی باید داخل رابطه مدل اون رو مشخص کنی
شبیه زیر:

        return $this->belongsToMany('App\Model')
            ->withPivot('status')
            ->withTimestamps();

جواد کرمی
تخصص : توسعه دهنده وب و اپلیکیشن | فر...
@javadkarami 4 سال پیش مطرح شد
0

@ali.bayat
وقتی رابطه رو به شکلی که شما گفتید تعریف کردم با این ارور مواجه میشم

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'created_at' in 'field list' 

ولی وقتی به این صورت رابطه رو تعریف میکنم:

return $this->belongsToMany('App\Model')

همچین مشکلی پیش نمیاد. درواقع بعد از اینکه دکمه ثبت رو میزنم، اطلاعات به درستی ذخیره میشه. به نظرتون اینطوری مشکلی پیش نمیاد؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

اون ارور به خاطر withTimestamps هست.. میتونی حذفش کنی
اما اگر بخواهی فیلد اضافه در pivot داشته باشی باید تعریفش کنی:


    return $this->belongsToMany('App\Model')
        ->withPivot('status');

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

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