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

مشکل با sync کردن در لاراول

سلام
مشکلی که دارم با سینک کردن subcategory هستش
محصول و دسته براحتی سینک میشند ولی زیر گروه رو نمیتونم

اینم کدها :
در مدل product :

public function subcategory()
{
    return $this->belongsToMany(SubCategory::class,
        'category_products','subcategory_id','category_id' );
}

مدل category :

public function subcategory()
{
    return $this->belongsToMany(Subcategory::class,
        'category_subcategory', 'category_id', 'subcategory_id' );
}

مدل subcategory :

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

دیتابیس :

   ```

$table->unsignedBigInteger('product_id');
$table->unsignedBigInteger('category_id');
$table->unsignedBigInteger('subcategory_id');
$table->foreign('product_id')
->references('id')
->on('products')
->onDelete('cascade');

    $table->foreign('category_id')
        ->references('id')
        ->on('categories')
        ->onDelete('cascade');

    $table->foreign('subcategory_id')
        ->references('id')
        ->on('categories')
        ->onDelete('cascade');

پیغام خطا :

SQLSTATE[HY000]: General error: 1364 Field 'subcategory_id' doesn't have a default value (SQL: insert into category_products (category_id, product_id) values (1, 1))



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

ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
0

فارغ از کدهای فعلیتون (که خیلی بهم ریز هم نوشته شده و نیاز به ویرایش markdown داره) هدفتون دقیقا چیه...؟ احساس می‌کنم از نظر طراحی منطقی، روابطتون نیازمند بازنگری و اصلاح هست.

اول رابطه ها رو مشخص کنید که به چه صورت باید باشه. مثلا رابطه محصول و دسته بندی که احتمالا باید از نوع one-to-many باشه. یا رابطه category و subcatgory هم به همین صورت.

اگر اینطوره چرا دارید از many-to-many استفاده می‌کنید...؟ علت خاصی داره این موضوع؟
اگر آره یکم بیشتر توضیح بدید که خروجی مدنظرتون چی هست؟


mahdi
@amirali4985 3 سال پیش مطرح شد
0

بله حق باشماست کدها در حال حاضر بهم ریخته س تا چندتا از ایرادها رو رفع کنم بعد برسم به مرتب کردنشون

اما در مورد سناریو. یه محصول یه کتگوری و یه ساب دارم.هر سه در سه تیبل جداگانه.
برای هر کدوم هم یه pivot تیبل هم زدم.
category_products
category_subcategory

از این کد برای ذخیره آی دی های محصول و دسته استفاده میکنم

$data->cats()->sync($request->category_id,false);

و از این کد هم برای ذخیره آی دی دسته و سابش :

$data1->subcat()->sync($request->subcat,false);

محصول و دسته اوکیه ولی دسته و سابش فقط دسته بدرستی ذخیره میشه و ساب یه ای دی کمتر ذخیره میکنه
مثلا : دسته شماره سه و ساب شماره 3 ولی موقع ذخیره 3 و 2 ذخیره میشن.

این کد هم توی مدل محصول :

   public function CATS(){
    return $this->belongsToMany(Category::class, 'category_products',
        'product_id', 'category_id');
}

این کد هم برای مدل دسته :

public function subcat()
{
    return $this->belongsToMany(SubCategory::class, 'category_subcategory',
        'category_id', 'subcategory_id');
}
این کد هم برای مدل ساب :

public function category(){
return $this->hasMany(Category::class);
}
public function products()
{
    return $this->hasMany(Products::class);
}

امیدوارم درست تونسته باشم توضیح بدم


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

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