سلام دوستان. من دوتا جدول توی دیتابیسم دارم که میخوام بین این دو جدول رابطه چند به چند ایجاد کنم. یک جدول میانی هم ایجاد کردم. اما مشکل من اینه که میخوام علاوه بر آیدی دوتا جدولی که میخوام با هم رابطه داشته باشن، میخوام یک ستون دیگه هم به این جدول میانی اضافه کنم.
مثلا مایگریشن زیر رو فرض کنید:
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));
من به این روش سعی میکنم اطلاعات رو وارد جدول کنم اما با ارور مواجه میشم.
اون ارور به خاطر withTimestamps هست.. میتونی حذفش کنی
اما اگر بخواهی فیلد اضافه در pivot داشته باشی باید تعریفش کنی:
return $this->belongsToMany('App\Model')
->withPivot('status');
مایگریشن مشکل خاصی نداره.
اطلاعات رو هم درست داری ذخیره میکنی
رابطه بین مدل ها رو به چه شکل پیاده سازی کردی؟
اگر بخواهی فیلد اضافه در pivot داشته باشی باید داخل رابطه مدل اون رو مشخص کنی
شبیه زیر:
return $this->belongsToMany('App\Model')
->withPivot('status')
->withTimestamps();
@ali.bayat
وقتی رابطه رو به شکلی که شما گفتید تعریف کردم با این ارور مواجه میشم
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'created_at' in 'field list'
ولی وقتی به این صورت رابطه رو تعریف میکنم:
return $this->belongsToMany('App\Model')
همچین مشکلی پیش نمیاد. درواقع بعد از اینکه دکمه ثبت رو میزنم، اطلاعات به درستی ذخیره میشه. به نظرتون اینطوری مشکلی پیش نمیاد؟
اون ارور به خاطر withTimestamps هست.. میتونی حذفش کنی
اما اگر بخواهی فیلد اضافه در pivot داشته باشی باید تعریفش کنی:
return $this->belongsToMany('App\Model')
->withPivot('status');
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟